首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将FF扩展移植到IE: JS WSC中没有全局窗口对象

将FF扩展移植到IE: JS WSC中没有全局窗口对象
EN

Stack Overflow用户
提问于 2011-02-12 22:49:27
回答 1查看 602关注 0票数 1

我正在尝试移植一个从Firefox到IE的扩展。这个扩展的所有代码都是用JS编写的(没有C++组件),所以我想我应该重用这些代码,只为mozilla的特定部分而烦恼(这无疑也是一种折磨,但我认为这比从头开始重写它要痛苦得多)。

FF扩展封装在一个JS对象中,该对象在"load“事件期间被初始化。然后在"DOMContentLoaded“事件上触发扩展的”业务“代码。

我最初的计划是创建一个WSC (窗口脚本组件),并在那里侦听onLoad事件,基本上做与原始代码相同的事情。但是,我发现我JavaScript脚本组件中没有隐式的全局窗口对象,

我的B计划是在我的C++ BHO代码中侦听"onBeforeNavigate2“事件,并调用JS代码来处理那里的扩展对象初始化。因此,我决定将浏览器窗口对象作为" window“参数传递给onBeforeNavigate JS函数,并重写原始扩展代码以使用显式的"window”变量,而不是依赖隐式的全局对象。

但是,当我处理"OnDocumentComplete“事件(再次在BHO中侦听它,并将浏览器窗口对象作为参数传递给WSC中的JS函数)时,我收到一个"Can't execute code from a freed script”错误。

WSC代码如下所示:

代码语言:javascript
复制
<?xml version="1.0"?>
<component>
<registration
   ...
>
</registration>
<public>
 <method name="OnBeforeNavigate">
   <parameter name="win" />
 </method>
 <method name="OnDocumentComplete">
   <parameter name="win" />
 </method>
</public>
<script src="sharedjs/foo.js" />
<script language="JScript">
<![CDATA[

var window;

function OnBeforeNavigate(win)
{
   window = win.document.parentWindow.top;
   window.myNS.extObject = initExtensionObject(...);
}
function OnDocumentComplete(win)
{
   window = win.document.parentWindow.top;
   var obj = window.myNS.extObject;
   obj.doTheBusinessStuff();
}
]]>
</script>
</component>

我认为这是因为WSC是在处理程序函数返回后卸载的。但是,浏览器窗口对象中保存了对JS扩展对象的引用,因此我希望浏览器保留代码。

那么-请问我的错误是什么?

干杯,汤姆

PS: WSC代表Windows脚本组件

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-16 03:51:03

听起来,当JS最终执行时,您对窗口对象的引用不再有效- What causes the error "Can't execute code from a freed script"

有几件事你可以尝试一下:

只需使用win.document.parentWindow而不是win.document.parentWindow.top,它应该指向有效的窗口引用。因为"top“可以指向父框架或窗口,而您最终会在所提供的链接中找到原因之一。

检查以确保对myNS.extObject的引用没有在bho中被销毁。您可能应该尝试在OnDocumentComplete中捕获每个语句,因为这两个语句中的任何一个都可能给出您看到的错误,并且两者都有不同的分辨率。

最后,如果可以,使用IE - http://msdn.microsoft.com/en-us/library/bb735853(v=vs.85).aspx中的上下文菜单执行扩展

然后,您就可以通过javascript中的external.menuArguments对象访问window对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4978670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档