Объект переходит в расширение хрома - PullRequest
1 голос
/ 20 декабря 2010

Мое расширение создает объект на фоновой странице и сохраняет все
переменные конфигурации в этом объекте.Этот объект является общим для
всех сценариев содержимого и, следовательно, фоновая страница отправляет его в
сценарии содержимого после получения запроса на подключение:

// В background.html
timObject = {
property1: "Hello",
property2: "MmmMMm",
property3: ["mmm", 2, 3, 6, "kkk"],
method1: function (){alert («Метод был вызван» +
this.property1)}
};

chrome.extension.onConnect.addListener (function (port) {
console.assert (port.name == "forTimObject");
port.postMessage ({object: timObject});
});

// Теперь в скрипте содержимого:
var extensionObject = null;
var port = chrome.extension.connect ({name: "forTimObject"});
port.onMessage.addListener(function (msg) {
if (msg.object! = null)
extensionObject = msg.object;
else
alert ("Object is null");
});

alert (extensionObject.property1);// Это нормально, окно с предупреждением отображается с правильным содержанием
alert (extensionObject.method1) // Uncaught TypeError: У объекта # нет метода 'method1'

Что я делаю неправильноздесь?
Заранее спасибо!

1 Ответ

1 голос
/ 24 февраля 2011

Механизм передачи сообщений Google Chrome работает с сериализацией данных в JSON:

Связь между расширениями и их скриптами содержимого работает с помощью передачи сообщений [...] Сообщение может содержатьлюбой допустимый объект JSON (нуль, логическое значение, число, строка, массив или объект).

Если объект отправляется с использованием передачи сообщений, он будет преобразован в JSON.Таким образом, во время «stringify] 2 метод« method1 »теряется, так как не может быть преобразован в допустимое выражение JSON. К сожалению, он завершается с ошибкой и сбивает с толку, как и остальныесвойства объекта корректно сериализованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...