Я переработал «Clip to DEVONthink» для использования в Opera 15+. Проблема, с которой я остался, заключается в том, что расширение работает только после перезапуска браузера.
Обновление 1: протестировано на Mac OS X 10.9.2 с Opera 21.0.1432.67, Opera Next 22.0.1471.40 и Google Chrome 35.0.1916.114. Все они ведут себя одинаково.
Обновление 2: собственный пример Opera для передачи сообщений получил такое же поведение. У меня остался вопрос, является ли это ожидаемым поведением.
В manifest.json определен фоновый скрипт:
"background": {
"scripts": [ "main.js" ]
},
и сценарий контента:
"content_scripts": [ {
"js": [ "add_listener.js" ],
"matches": [ "http://*/*", "https://*/*" ],
}],
... а в main.js в chrome.browserAction.onClicked.addListener сообщение отправляется сценарию содержимого для запроса заголовка и содержимого страницы и т. д.
chrome.browserAction.onClicked.addListener(
function (tab) {
chrome.tabs.sendMessage(tab.id, {line: 'getdevonthinkurl' });
}
);
... и сценарий содержимого отправляет сообщение обратно:
chrome.runtime.onMessage.addListener(
function (request, sender){
if (request.line=='getdevonthinkurl'){
chrome.runtime.sendMessage({devonthinkurl:getDEVONthinkURL()});
}
}
);
... и это сообщение получает фоновый скрипт main.js:
chrome.runtime.onMessage.addListener(
function (request, sender) {
if (request.devonthinkurl){
chrome.tabs.update(sender.tab.id, {"url": request.devonthinkurl});
}
}
);
Как упоминалось выше, он отлично работает после перезагрузки браузера, но не понимает, почему он не будет работать без него.
У кого-нибудь есть идея (могу добавить, что я не силен в программировании и, возможно, в дизайне есть фундаментальный недостаток)?