gpt4 book ai didi

javascript - 将 FF 扩展移植到 IE : no global window object in JS WSC

转载 作者:可可西里 更新时间:2023-11-01 12:05:33 26 4
gpt4 key购买 nike

我正在尝试将一个扩展从 Firefox 移植到 IE。所有扩展的代码都在 JS 中(没有 C++ 组件),所以我想我会重用代码并且只麻烦自己处理它的 mozilla 特定部分(这无疑也是一种折磨,但我认为它比重写它更痛苦从头开始)。

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

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

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

但是,当我处理“OnDocumentComplete”事件时(再次在 BHO 中监听它并将浏览器窗口对象作为参数传递给 WSC 中的 JS 函数),我收到“无法执行来自释放的脚本”错误。

WSC 代码如下所示:

<?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 脚本组件

最佳答案

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

一些你可以尝试的事情:

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

检查以确保对 myNS.extObject 的引用未在 bho 中被破坏。您可能应该 try catch OnDocumentComplete 中的每个语句,因为它们中的任何一个都可能给您带来您所看到的错误,并且两者都有不同的解决方案。

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

然后您将可以通过 javascript 领域中的 external.menuArguments 对象访问窗口对象。

关于javascript - 将 FF 扩展移植到 IE : no global window object in JS WSC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4978670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com