Hatena::ブログ(Diary)

masa’s memo このページをアンテナに追加 RSSフィード

2013-01-21 VBS const vs IE10 JavaScript

[][]Object.freeze(window) vs VBScript

IE10 Release Preview では Object.freeze(window)は VBScriptグローバル変数追加動作を阻止できない。Object.defineProperty で上書き禁止の同名のプロパティをあらかじめ作っておくと阻止できる。

ちなみに追加された変数をリストアップする方法は今の所見つかっていない (参考: http://d.hatena.ne.jp/hasegawayosuke/20130116/p1 )

<script type="text/javascript">
Object.freeze(window);
execScript("z=1","vbscript");
alert(window.z); // Shows 1
</script>

[][] VBSconstJSで上書きしてみる

IE8だと上書きの代入でエラーになる。これは理解できる。Strict mode のときの IE10 Release Previewも代入でエラーでこれも理解できる。でも Strict mode では無いときの IE10 Release Preview の動作がよくわからない

<script type="text/vbscript">
a=1
Msgbox a
</script>
<script type="text/javascript">
function f() {
  try {
    alert(
     JSON.stringify(Object.getOwnPropertyDescriptor(window,"a")));
  } catch (e) {
    alert(window.a)
  }
}

f(); //It shows window.a is 1.
a=2; //IE8 makes runtime error, but IE10 Release preview accepts this when script is not "strict mode".
f(); //It shows window.a is 2 !!
</script>
<script type="text/vbscript">
Msgbox TypeName(a) & ":" & a 'It is Integer:1
Msgbox TypeName(window.a) & ":" & window.a 'It is Long:2 at IE10 Release preview
</script>
2013/01/25 追記

IE10 Release preview で、JavaScriptで定数を上書きした後にVBScript側で a と window.a の値を比較するとwindow.a の変更内容が a に反映されていないことがわかります。VBScript側から見たら a は定数なので変更内容を取り込む処理が省略されているような感じです。

2013/01/25 追記2

strict modeでは、定数の上書きではなく未定義の変数への代入でエラーになるので、JavaScriptからはやはり定数としては見えていないようです

2012-10-30

[]イベントハンドラの扱いがよくわからない

b1とb2のclick動作の違いがどこから来るのか教えてください。

<html>
<head><title>Test of Button Event</title></head>
<body>
<form name=f>
<!-- clicking b1 shows 1 and 3 --> 
<input type=button name=b1 value="b1" language=vbscript onclick="alert 0">
<!-- clicking b2 shows 2 and 4 --> 
<input type=button name=b2 value="b2" language=vbscript onclick="alert 0">
</form>
<script for=b1 event=onClick language=vbscript>alert "a"</script>
<script for=b1 event=onClick language=vbscript>alert 1</script>
<script language=vbscript>
Sub fn()
  alert 2
End Sub
Sub b1_OnClick()
  alert 3
End Sub
Set document.f.b1.onClick=GetRef("fn") 'this is not affected
Sub b2_OnClick()
  alert 4
End Sub
Set document.f.b2.onClick=GetRef("fn")
</script>
</body>
</html>

2012-09-13

[]任意スクリプトを EXECUTE と CHR と記号で表現する

入力された文字列内にASCII外の文字がある場合は、EXECUTEの引数としてASCIIだけを使った形で指定文字列の内容と同じ文字列を返す式を組み立てて(ASCII外の文字はCHRWを使って表現)、それに対して先日の変換処理を行うことで、任意スクリプトも EXECUTE と CHR と記号で表現することが可能です

続きを読む

2012-09-12

[]EXECUTEとCHRと記号だけのスクリプトの解説

これは no title の解説です。


続きを読む

2012-09-11

[]任意のASCIIで書かれたVBScriptを EXECUTEとCHRと記号だけに置換する

変換コードそのものもEXECUTEとCHRと記号だけで。

続きを読む