Как я могу избежать следующей ошибки и почему я ее получу?Ошибка: не разрешено определять объект перекрестного происхождения как свойство на [Object] или [Array] XrayWrapper
Редактировать: Возможно, мне нужно спросить, как я могу сделать объекты из привилегированной области видимыми для менее привилегированной области.
Моя цель - экспортировать/вернуть динамически созданные объекты в скрипт страницы в качестве возвращаемого значения ранее клонированной/введенной функции.
manifest.json
{
"manifest_version": 2,
"name": "foo",
"version": "1.0.0",
"description": "Does something",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content-script.js"]
}
]
}
контент-script.js
function foo (obj) {
obj.x = {"xxx": 444};
}
window.wrappedJSObject.foo = exportFunction(foo, window);
страница сценария (можно вставить в веб-консоли)
foo({"sss": 333})
// Error: Not allowed to define cross-origin object as property on [Object] or [Array] XrayWrapper
Глубже в консоли brwoser я получаю это:
"ObjectActor.prototype.grip previewer function threw an exception: Error: Permission denied to access object
Stack: [email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/object.js:1797:16
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/object.js:131:15
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/webconsole.js:483:12
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/object.js:2187:14
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/webconsole.js:429:12
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/webconsole.js:900:21
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/actors/webconsole.js:857:20
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/server/main.js:1743:15
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://devtools/shared/transport/transport.js:761:7
Line: 0, column: 0"
Я думаю, что я не вполне понимаю поведение XRay, поэтому я не уверен, если это вообще возможно благодаря механизмам scurity.
Пожалуйста [править] вопрос быть на тему: включать ** полный ** [mcve], что * дублирует проблему *. Включая * manifest.json *, некоторые из сценариев background/content/popup/HTML. Вопросы, требующие помощи по отладке («** почему этот код не работает? **)) должны включать: ► желаемое поведение, ► конкретную проблему или ошибку * и * самый короткий код, необходимый для его воспроизведения ** в вопросе сам**. Вопросы без четкого описания проблемы не полезны другим читателям. Смотрите: «** Как создать [mcve] **», [о каких темах я могу спросить здесь?] (Http://stackoverflow.com/help/on-topic) и [ask]. – Makyen
Общие сведения. Кажется, вы хотите напрямую вызвать функцию в сценарии содержимого из сценария, который вы вставляете в контекст страницы. Ты не сможешь это сделать. Вам нужно передать сообщения между двумя контекстами. Это означает, что связь будет асинхронной. Вы можете отправить сообщение из контекста страницы, который в основном говорит: Пожалуйста, пришлите мне результаты этой функции с этими параметрами. Однако, если то, что вы хотите сделать, это «тайно» вызывать исходную функцию (на странице) из перезаписанной функции (на странице), вы можете это сделать. – Makyen
[mcve] означает ** совершенно **, но * минимальный *. Пожалуйста, дайте * все *, чтобы дублировать вопрос. Для WebExtension это почти всегда требует * manifest.json *. Обычно это также включает в себя различные другие файлы JavaScript и HTML, необходимые для дублирования проблемы. – Makyen