Firefox CloneInto 不会将功能从附加脚本复制到页面脚本

Firefox CloneInto does not copy function from add-on script to page script

本文关键字:脚本 复制 CloneInto 功能 Firefox      更新时间:2023-09-26

我创建了一个 Greasemonkey 脚本,其中包含一个我想从页面内部脚本访问的对象。

为此,本页描述了几种安全的方法。
其中之一是使用 Components.utils.cloneInto 函数。

下面是一个脚本示例。

// ==UserScript==
// @name        Test CloneInto
// @namespace   Test CloneInto
// @description Test CloneInto
// @include     http://stackoverflow.com*
// @version     1
// @grant       GM_xmlhttpRequest
// ==/UserScript==
var myObj = {}
myObj.test = function() {
  alert("works");
}
myObj.num = 152;
unsafeWindow.myObj = cloneInto(myObj, unsafeWindow, {cloneFunctions: true});
var scriptDOM = document.createElement("script");
scriptDOM.type = "text/javascript";
scriptDOM.innerHTML = "alert(window.myObj.num);'
                       alert(window.myObj.test);"
document.getElementsByTagName("head")[0].appendChild(scriptDOM);
"

152"显示正确,但随后出现"未定义"而不是我的函数。
然而,我按照文档的建议使用了{cloneFunctions: true}

我使用Firefox 34,有人有解决这个问题的想法吗?

编辑:使用谷歌浏览器和Tampermonkey可以正常工作。
编辑 2:在 Greasemonkey 存储库上打开了第 2070 期。

为此,本页描述了几种安全的方法。

这是对附加 SDK 内容脚本的更改。

此更改与 Greasemonkey 或用户脚本无关,Addon-sdk 内容脚本与 Greasemonkey 用户脚本不同。

对于Greasemonkey,我认为这仍然有效:

unsafeWindow.myObj = myObj