尝试创建一个简单的插件来重试Google中的duckduckgo搜索。它解析当前的duckduckgo网址搜索参数,将它们附加到Google网址,然后在新标签页中打开该网址。
将searchGoogle.js直接粘贴到duckduckgo搜索的控制台上下文中时,效果很好。并且插件在about:debugging中正确加载。但是我无法使“ searchGoogle.js”在按钮(browser_action)点击时触发。我在这里想念什么?
manifest.json
{
"manifest_version": 2,
"name": "SearchGoogle",
"version": "1.0",
"description": "Repeats a duckduckgo search in a new tab using google.",
"icons": {
"48": "icons/48search-pointer-icon.png",
"32": "icons/32search-pointer-icon.png",
"16": "icons/16search-pointer-icon.png"
},
"permissions": [
"tabs",
"activeTab",
"webRequest",
"webNavigation"
],
"browser_action": {
"default_icon": "icons/48search-pointer-icon.png",
"default_title": "SearchGoogle"
},
"background": {
"scripts": ["searchGoogle.js"]
}
}
searchGoogle.js
var myStr = window.location.href;
var googurl = 'https://www.google.com/search?q=';
var params = getmyuri('q', myStr);
window.open(googurl+params, '_blank');
window.focus();
window.alert(googurl+params);
function getmyuri(n,s){
n = n.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");
var p = (new RegExp("[\\?&]"+n+"=([^&#]*)")).exec(s);
return (p===null) ? "" : p[1];
}
答案 0 :(得分:1)
您当前正在做的只是声明一个后台脚本。当浏览器加载插件时,将加载后台脚本,但是您需要一些代码来响应其他事件。
这是我在browser_action的MDN页面中找到的内容:
如果不提供弹出窗口,则当用户单击按钮时,会将click事件调度到扩展程序的后台脚本。 (...) 当用户使用以下代码单击图标时,扩展程序的后台脚本可以接收单击事件:
browser.browserAction.onClicked.addListener(function(){})
因此,在您的情况下,需要将“单击时”代码包装到此browserAction.onClicked
事件处理程序中,如下所示:
// searchGoogle.js
browser.browserAction.onClicked.addListener(function(){
var myStr = window.location.href;
var googurl = 'https://www.google.com/search?q=';
var params = getmyuri('q', myStr);
window.open(googurl+params, '_blank');
window.focus();
window.alert(googurl+params);
});
请注意,每次单击browserAction图标时,都应执行代码。
答案 1 :(得分:0)
对于其他来这里遇到同样问题的人。这是观察到的教训:
window.alert
在后台脚本中不是问题。而是将内容包装在console.log()
中。 Logging to console from Firefox extension? browser.browserAction.onClicked.addListener(function(){})
中。这是最终的工作脚本。
JS是:
browser.browserAction.onClicked.addListener(function(tab){
function getmyuri(n,s){
n = n.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");
var p = (new RegExp("[\\?&]"+n+"=([^&#]*)")).exec(s);
return (p===null) ? "" : p[1];
}
console.log(tab)
var googurl = 'https://www.google.com/search?q=';
var params = getmyuri('q', tab.url);
browser.tabs.create({url: googurl+params});
});