在IE 9中的window.execScript中未正确执行VBScript

时间:2014-09-18 10:42:27

标签: javascript internet-explorer vbscript

我知道,IE 8和9已经过时了。但是我需要检查那里的flash插件。它们没有提供有用的navigator.plugins数组,所以我在寻找替代品。可以找到一个here

另一个是这样的:

var a = void(0);
window.execScript("On error resume next: a = IsObject(CreateObject('ShockwaveFlash.ShockwaveFlash.11'))", "VBScript");
console.log(a); //-> undefined

或:

var a = 'jess';
window.execScript("On error resume next: a = IsObject(CreateObject('ShockwaveFlash.ShockwaveFlash.11'))", "VBScript");
console.log(a); //-> 'jess'

或:

var a = false;
window.execScript("On error resume next: a = IsObject(CreateObject('ShockwaveFlash.ShockwaveFlash'))", "VBScript"); //no version string here
console.log(a); //-> false

似乎 execScript VBScript 根本不会更改 a 的值。

我猜,范围存在问题,执行此脚本(无法访问 a ) - 或类似问题。我已经在匿名函数和控制台中尝试了这段代码。

有没有人遇到过这个问题?有没有解释或解决方案?非常感谢你!

1 个答案:

答案 0 :(得分:0)

好吧,主要问题是VBScript中缺少换行符(或者在JS字符串中假装为VBScript)。

而不是:

window.execScript("On error resume next: a = IsObject(CreateObject('ShockwaveFlash.ShockwaveFlash.10'))", "VBScript");

你必须写:

window.execScript("On error resume next:\n a = IsObject(CreateObject('ShockwaveFlash.ShockwaveFlash.10'))", "VBScript");

有效。我不熟悉Basic或VBScript,但是我已经考虑过这个问题并且认为需要一个换行符来知道一个新的命令。

我仍然不确定,假设是否正确, window.execScript IsObject (VBScript)更改了只有JS变量的值,如果结果是 true