Ответ 1
chrome.runtime.sendMessage
/onMessage
(и другие связанные события/методы, такие как connect
) были введены в Chrome 26.
Если вы хотите написать расширение, совместимое с Chrome 20-25, используйте chrome.extension.sendMessage
.
Способ достижения оптимальной совместимости - это определить методы chrome.runtime
самостоятельно. Например, запустите следующий код перед остальной частью вашего кода (background/content script):
if (!chrome.runtime) {
// Chrome 20-21
chrome.runtime = chrome.extension;
} else if(!chrome.runtime.onMessage) {
// Chrome 22-25
chrome.runtime.onMessage = chrome.extension.onMessage;
chrome.runtime.sendMessage = chrome.extension.sendMessage;
chrome.runtime.onConnect = chrome.extension.onConnect;
chrome.runtime.connect = chrome.extension.connect;
}
Затем вы можете просто использовать последний формат API:
// Bind event:
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
// Do something
});
// Send message:
chrome.runtime.sendMessage({greeting: 'hello'});
Если вы чувствуете себя некомфортно с помощью методов модификации объекта chrome.runtime
, вы можете использовать следующий подход:
var runtimeOrExtension = chrome.runtime && chrome.runtime.sendMessage ?
'runtime' : 'extension';
// Bind event:
chrome[runtimeOrExtension].onMessage.addListener(
function(message, sender, sendResponse) {
// Do something
});
// Send message:
chrome[runtimeOrExtension].sendMessage({greeting: 'hello'});