Firefox addon 错误:不允许将跨原点对象定义为[object]或[Array]XrayWrapper上的属性

Firefox addon 错误:不允许将跨原点对象定义为[object]或[Array]XrayWrapper上的属性,firefox-addon,content-script,firefox-addon-webextensions,Firefox Addon,Content Script,Firefox Addon Webextensions,如何避免以下错误,以及为什么会出现此错误? 编辑:也许我必须问一下如何使特权作用域中的对象对特权较低的作用域可见 我的目标是将动态创建的对象作为先前克隆/注入函数的返回值导出/返回到页面脚本 manifest.json { "manifest_version": 2, "name": "foo", "version": "1.0.0", "description": "Does something", "content_scripts": [ {

如何避免以下错误,以及为什么会出现此错误?

编辑:也许我必须问一下如何使特权作用域中的对象对特权较低的作用域可见

我的目标是将动态创建的对象作为先前克隆/注入函数的返回值导出/返回到页面脚本

manifest.json

{
    "manifest_version": 2,
    "name": "foo",
    "version": "1.0.0",
    "description": "Does something",
    "content_scripts": [
     {
      "matches": ["<all_urls>"],
      "js": ["content-script.js"]
     }
    ]
}
页面脚本(可插入web控制台)

在brwoser控制台的更深处,我可以看到:

"ObjectActor.prototype.grip previewer function threw an exception: Error: Permission denied to access object
Stack: PseudoArray@resource://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/object.js:1797:16
ObjectActor.prototype.grip@resource://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/object.js:131:15
WCA_objectGrip@resource://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/webconsole.js:483:12
createValueGrip@resource://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/object.js:2187:14
WCA_createValueGrip@resource://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/webconsole.js:429:12
WCA_onEvaluateJS@resource://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/webconsole.js:900:21
WCA_onEvaluateJSAsync@resource://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/webconsole.js:857:20
onPacket@resource://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/main.js:1743:15
ChildDebuggerTransport.prototype.receiveMessage@resource://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/shared/transport/transport.js:761:7
Line: 0, column: 0"
我想我还没有完全理解X射线的行为,所以我不是舒尔,如果这是可能的话,那是因为有污损机制。

试图详细解释如何工作不是我的能力范围,但这里的问题应该是你正在创建
{“xxx”:444}
在脚本上下文中,具有除试图访问
x
的页面脚本之外的其他权限。这意味着不允许页面脚本访问此数据。解决方案是在页面上下文中创建对象,这可以通过

content script.js

function foo (obj) {
  obj.x = {"xxx": 444};
}
window.wrappedJSObject.foo = exportFunction(foo, window);
function foo (obj) {
  obj.x = cloneInto({"xxx": 444}, obj);
}
window.wrappedJSObject.foo = exportFunction(foo, window);
试图详细解释如何工作不在我的能力范围内,但这里的问题应该是您正在脚本上下文中创建
{“xxx”:444}
,而不是尝试访问
x
的页面脚本。这意味着不允许页面脚本访问此数据。解决方案是在页面上下文中创建对象,这可以通过

content script.js

function foo (obj) {
  obj.x = {"xxx": 444};
}
window.wrappedJSObject.foo = exportFunction(foo, window);
function foo (obj) {
  obj.x = cloneInto({"xxx": 444}, obj);
}
window.wrappedJSObject.foo = exportFunction(foo, window);

请将问题放在主题上:包括一个与问题重复的完整问题。包括manifest.json、一些后台/内容/弹出脚本/HTML。寻求调试帮助的问题(“为什么此代码不工作?”)必须包括:►想要的行为,►特定的问题或错误,以及►在问题本身中复制它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:“如何创建”和。概述:您似乎希望从插入页面上下文的脚本中直接调用内容脚本中的函数。你不能这样做。您需要在两个上下文之间传递消息。这意味着通信将是异步的。您可以从页面上下文发送一条消息,基本上是这样的:请用这些参数将此函数的结果发送给我。但是,如果您想做的是从覆盖函数(在页面中)中“秘密”调用原始函数(在页面中),您可以这样做。a表示完成,但最小。请提供复制此问题所需的一切。对于WebExtension,这几乎总是需要manifest.json。通常,这还包括复制该问题所需的各种其他JavaScript和HTML文件。如果我们不必重新创建复制问题所需的任何代码,那么帮助就容易多了。这是您已经拥有的代码。因此,请帮助我们帮助您,并提供一个完整的复制问题。如果没有a,甚至开始帮助你所需的努力量也要高得多,这大大减少了愿意/能够帮助你的人数。即使我们付出了额外的努力,我们也必须猜测您的问题的重要部分。这在某种程度上是可能的,因为XrayVision导出了一个函数,但似乎不允许我将对象从内容脚本传递到页面脚本。即使我可以通过“cloneInto()”将对象从内容脚本导出到页面脚本。请在主题中添加问题:包括一个与问题重复的完整问题。包括manifest.json、一些后台/内容/弹出脚本/HTML。寻求调试帮助的问题(“为什么此代码不工作?”)必须包括:►想要的行为,►特定的问题或错误,以及►在问题本身中复制它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:“如何创建”和。概述:您似乎希望从插入页面上下文的脚本中直接调用内容脚本中的函数。你不能这样做。您需要在两个上下文之间传递消息。这意味着通信将是异步的。您可以从页面上下文发送一条消息,基本上是这样的:请用这些参数将此函数的结果发送给我。但是,如果您想做的是从覆盖函数(在页面中)中“秘密”调用原始函数(在页面中),您可以这样做。a表示完成,但最小。请提供复制此问题所需的一切。对于WebExtension,这几乎总是需要manifest.json。通常,这还包括复制该问题所需的各种其他JavaScript和HTML文件。如果我们不必重新创建复制问题所需的任何代码,那么帮助就容易多了。这是您已经拥有的代码。因此,请帮助我们帮助您,并提供一个完整的复制问题。如果没有a,甚至开始帮助你所需的努力量也要高得多,这大大减少了愿意/能够帮助你的人数。即使我们付出了额外的努力,我们也必须猜测您的问题的重要部分。这在某种程度上是可能的,因为XrayVision导出了一个函数,但似乎不允许我将对象从内容脚本传递到页面脚本。尽管我可以通过“cloneInto()”将对象从内容脚本导出到页面脚本。我发誓,我尝试了近千次cloneInto(),但愚蠢的是,我总是将窗口用作targetScope。。。非常感谢你!我发誓,我试了近千次克隆人,