我重新设计了“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://*/*" ],
}],
...在 chrome.browserAction.onClicked.addListener 的 main.js 中,一条消息被发送到内容脚本以请求页面标题和内容等。
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});
}
}
);
如上所述,它在浏览器重新启动后可以正常工作,但它不明白为什么没有它就无法工作。
有没有人有想法(我可能会补充说我不擅长编程,并且设计中可能存在根本缺陷)?