Firefox CloneInto 不会将函数从附加脚本复制到页面脚本

问题描述 投票:0回答:2

我创建了一个 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,请问有人可以解决这个问题吗?

编辑: 使用 Google Chrome 和 Tampermonkey 效果很好。
编辑2:在Greasemonkey存储库上打开问题2070

javascript firefox firefox-addon greasemonkey userscripts
2个回答
0
投票

迟到总比不到好:)

您可能已经发现了这一点。您可能只是因为缺少分号而出现语法错误。

// ==UserScript==
// @name        Test CloneInto
// @namespace   Test CloneInto
// @description Test CloneInto
// @include     http://stackoverflow.com*
// @version     1
// ==/UserScript==
var myObj = {};
myObj.test = function() {
  alert("works");
};
myObj.num = 152;
unsafeWindow.myObj = cloneInto(myObj, unsafeWindow, {cloneFunctions: true});

作为用户脚本在 FireMonkey 中工作得很好。 当我打开开发者工具 (F12) 并写入

myObj

显示

Object { test: (), num: 152 }

继续努力!


-1
投票

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

这描述了对附加 SDK 内容脚本的更改。

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

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

unsafeWindow.myObj = myObj


    

© www.soinside.com 2019 - 2024. All rights reserved.