2012-02-28 3 views
1

Я делаю расширение (A) для Chrome, которое связывается с другим расширением (B). Я хочу A, чтобы предоставить функцию B, но она не будет отправлена. Я могу отправить строки просто отлично.Функции совместного доступа между расширениями Chrome

A имеет следующий код. rect - это функция в этом коде.

chrome.extension.onRequestExternal.addListener(
    function(request, sender, sendResponse) { 
     obj = {} 
     obj.permisions = "all" 
     obj.rect = Rect 
     alert(obj.permisions+","+obj.rect) 
     sendResponse(obj); 
}); 

... этот код работает просто отлично. В предупреждении отображается поле с надписью «все», затем выводится функция.

B имеет следующий код.

chrome.extension.sendRequest(ext[i].id, {}, function(lib) { 
    alert(lib.permisions+","+lib.rect) 
}); 

Предупреждение на этом показывает «все, неопределенные». Могут ли функции не передаваться между расширениями?

ответ

4

В то время как вы можете конечно communicate between extensions, вы можете пройти действительный JSON. К сожалению, действительный JSON включает только простые типы данных (String, Number, Boolean, Array, Object * или Null).

Один из способов сделать это - передать функцию как строку и использовать eval на принимающем конце. Может быть небезопасным, но - выполнимо.

* В то время как функция технически является Object, в этом контексте Object относится к парам имен: значений вышеупомянутых простых типов данных.

Смежные вопросы