在弹出窗口.html从后台.js的Onclicked事件
onclicked event in popup.html from background.js
我想知道是否有一种方法可以设置背景。js做一些事情,如果在弹出窗口。html中的特定元素被点击,如:
chrome.browserAction.getPopup(function(){
document.getElementById('me').addEventListener('click', function(){
/* do something ! */
});
});
我是开发Chrome扩展的新手。
有两种方法可以实现你想要做的事情;两者都需要在弹出窗口中使用单独的脚本。
-
直接调用后台页面(更容易实现)。从概念上讲,这和你想做的事情很相似,但方向不同。
(这是由devnull69的回答覆盖)
-
消息后台页面。它在结构上更清晰(你解耦了弹出窗口和背景的工作方式),如果你从弹出窗口移动到内容脚本,它将工作,因为它们不能直接调用背景。
background.js:
chrome.runtime.onMessage.addListener( function(message, sender, sendResponse) {
if(message.from && message.from === "popup"){
switch(message.action){
case "doSomething":
/* Do something */
/* Maybe sendResponse(something) */
break;
}
}
});
popup.js
function doSomethingAfterwards(response){
/* Do something else */
}
document.getElementById('me').addEventListener('click', function(){
chrome.runtime.sendMessage(
{from: "popup", action: "doSomething"},
doSomethingAfterwards
);
});
编辑:为了完成仅,我补充说,有一个方法chrome.extension.getViews
,做你最初想要的。
var popup = chrome.extension.getViews({type: "popup"})[0];
popup.document.getElementById('me').addEventListener('click', function(){
/* do something ! */
});
但是使用它并不是一个很好的主意:你什么时候调用它?你的后台页面不会自动收到弹出窗口打开的通知(如果有弹出窗口,甚至没有chrome.browserAction.onClicked
事件),所以它落在前两种方法上,让后台知道弹出窗口已经打开并准备好了。
我认为你应该"本末倒置",即颠倒过来思考
假设,你想在你的后台脚本中执行以下方法,点击弹出窗口的一个元素:
function yourBackgroundMethod(parameter) {
...
}
如果你点击了弹出窗口中的内容,你可以在弹出窗口中使用Javascript到
- 添加一个点击事件监听器到元素
在click处理程序中,您可以访问后台脚本(即其窗口对象)并直接在后台脚本上下文中执行代码
chrome.runtime.getBackgroundPage(function(bgWindow) { bgWindow.yourBackgroundMethod(yourParameter); });
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 如何使用 node.js 比较两个 json 数组
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- Selectize.js:如何对整数值的选项进行排序
- 在弹出窗口.html从后台.js的Onclicked事件