我重写了“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});
}
}
);
如上所述,它在浏览器重启后工作正常,但它不明白为什么没有它就无法工作。
有没有人有想法(我可能会补充一点,我在编程方面不够强大,而且设计中可能存在根本性缺陷)?
答案 0 :(得分:1)
我唯一想到的是你重新加载扩展,但是在这一步之后你就不会刷新注入内容脚本的页面了。背景页面有错误吗?我试了几次,它对我有用。无论如何,你可以在消息中使用回调,这可以更具可读性。
所以main.js看起来像:
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.sendMessage(tab.id, {line: 'getdevonthinkurl'},
function(response){
chrome.tabs.update(tab.id, {'url': request.devonthinkurl});
});
});
和add_listener.js一样:
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse){
if (request.line=='getdevonthinkurl'){
sendResponse({devonthinkurl:getDEVONthinkURL()});
}
}
);