【急ぎ】Javascript ブラウザでセキュリティの警告メッセージを出さないようにするには?
急ぎの質問です。
的確なご回答にはたくさんポイントをつけさせていただきますので、
どうぞよろしくお願いします。
以下のスクリプトをホームページに設置したのですが、
インターネットエクスプローラで
「セキュリティの警告」というのが出てしまい、
「許可する」を選ばないとスクリプトが動作しません。
「セキュリティの警告」を出さずにページを開いただけで
動作させる方法はありますか?あればお教えください。
================
<FORM name=f target=_blank>
<INPUT style="
BORDER-RIGHT: #ffffff 1px solid;
BORDER-TOP: #ffffff 1px solid;
BORDER-LEFT: #ffffff 1px solid;
BORDER-BOTTOM: #ffffff 1px solid;
COLOR: #FF3300;
FONT-SIZE: 27px;
BACKGROUND-COLOR: #ffffff;
TEXT-ALIGN: center" size=30 name=days
>
</FORM>
<SCRIPT language=JavaScript>
<!--
millenium = new Date(2008,11,15,23,59,00)
function display() {
today = new Date()
myMsec= millenium.getTime()-today.getTime();
time0 = Math.floor(myMsec/(1000*60*60*24));// カウントダウン用'日' 取得
myMsec -= (time0*(1000*60*60*24)); // 経過秒から'時'を引く
time1 = Math.floor(myMsec/(1000*60*60));// カウントダウン用 '時' 取得
myMsec -= (time1*(1000*60*60)); // 経過秒から'時'を引く
time2 = Math.floor(myMsec/(1000*60)); // カウントダウン用 '分' 取得
myMsec -= (time2*(1000*60));// 経過秒から'分'を引く
time3 = Math.floor(myMsec/1000);// カウントダウン用 '秒' 取得
myMsec -= (time3*(1000)); // 経過秒から'秒'を引く
time4 = Math.floor(myMsec/10);// カウントダウン用 '少数秒' 取得
for(i=0;i<2;i++){ time2 = '' + '0' + time2; }
for(i=0;i<2;i++){ time3 = '' + '0' + time3; }
for(i=0;i<2;i++){ time4 = '' + '0' + time4; }
time2 = time2.substring(time2.length - 2,time2.length);
time3 = time3.substring(time3.length - 2,time3.length);
time4 = time4.substring(time4.length - 2,time4.length);
time0 = time0 - 31;
if((millenium - today) > 0){
document.f.days.value = "受付終了まであと"+time0+"日と"+time1+":"+time2+":"+time3+"."+time4+"です"
}else{
document.f.days.value = "受け付けは終了しました"
}
tid = setTimeout('display()', 10)
}
display()
// -->
</SCRIPT>
================
お礼
>void(0)をvoid 0にすれば1文字削減できますよね これだけで、jQuery 1.8.0(圧縮済)が10バイト減りました。 >function X(a,b,c){ >if(hoge === void 0){} >} >のような形なら >function X(a,b,c,u){ >if(hoge === u){} >} この形は(意味のない引数)始めて知りました。 ですが、自動化をしていますと、void 0のが少々手軽かな?というのがありますので 手動で書き換えるしかないですね。 (詳細は補足欄にて) >例えばMath.floorと~~は同じ機能ではありません >Math.floor(9876543210)は9876543210ですが、~~9876543210は1286608618です ご指摘ありがとうございます。 危ない線を走る所でしたが、今回は、Math.floor の代替処理は、乱数の整数化以外には 使用していませんので、とりあえずは大丈夫かと思います。 >withを使ったりforをforin 少しはあるものの、withを使って効果があるものが思ったよりない感じがしています。 ですが、数か所、使えそうな所がありますので、試してみます。 >細かいことなら数値化をn=+"123"でやったりですかね aaa=aaa+"abc"; aaa=aaa+"def"; (以下、数10行) を aaa+="abc" +"def"; をまとめたことがある程度でしょうか。
補足
yuicompressorとpackerの混合での圧縮後コードを こちらにかいてみます。 圧縮したコードの比較は、以下のようになります。 function a() { var a=0; return void(0); } function b() { var a=1; return void(0); } function c() { var a=2; return void(0); } eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('7 a(){6 5=0;4 3(0)}7 9(){6 5=1;4 3(0)}7 8(){6 5=2;4 3(0)};',11,11,'|||void|return|d|var|function|c|b|'.split('|'))) >「4 3(0)」 = void(0) function a() { var a=0; return void 0; } function b() { var a=1; return void 0; } function c() { var a=2; return void 0; } eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('7 a(){6 5=0;4 3 0}7 9(){6 5=1;4 3 0}7 8(){6 5=2;4 3 0};',11,11,'|||void|return|d|var|function|c|b|'.split('|'))) >「4 3 0」=void 0 function a(u) { var a=0; return u; } function b(u) { var a=1; return u; } function c(u) { var a=2; return u; } eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('7 a(3){6 5=0;4 3}7 9(3){6 5=1;4 3}7 8(3){6 5=2;4 3};',11,11,'|||e|return|d|var|function|c|b|'.split('|'))) >「4 3」=return u p.s.この程度だけですと、サイズが小さすぎるので、packerを使うとサイズが増えますが、それなりの規模のJSを作ったとして仮定しています。