背景如何确定Chrome扩展程序是否位于内容脚本的弹出窗口中?
我有一个Chrome扩展与浏览器的行动在新标签中推出index.html
。
我想更新扩展名,首先在popup中打开index.html
,然后包含一个按钮,用户可以单击以选择性地在新选项卡中打开该应用程序。
我不希望此按钮显示它不是弹出式窗口(因为它没有意义),这意味着内容脚本需要知道它是否是弹出窗口才能显示按钮。
问题
这是一个问题的两个部分:
- 如何做一个Chrome扩展弹出知道这是一个弹出?
- 如何在呈现弹出窗口之前将该信息传递给内容脚本?
我已经试过
我试着使用chrome.extension.getViews
在background.js
以首先确定是否弹出打开。然后,我会向内容脚本发送一条消息,然后显示该按钮。然而,我还没有得到它的工作 - views
始终是一个空的数组,并且该消息似乎永远不会被内容脚本接收。
这里是我的manifest.json
文件的相关部分:
"background": {
"scripts": ["background.js"]
},
"browser_action": {
"default_icon": {
"19": "img/icon19.png",
"38": "img/icon38.png"
},
"default_title": "Super Simple Tasks",
"default_popup": "index.html"
}
这里就是我在一直在努力我background.js
:
// Get all popups
var views = chrome.extension.getViews({ type: "popup" });
// Send a message if there is a popup
if (views.length > 0){
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "popup_open"}, function(response) {});
});
};
然后在我的内容脚本,我听该消息然后添加一个类到身体:
// Listen for the message
chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) {
if (msg.action === 'popup_open') {
// My code here to show the button
}
});
嗨,index.html是一个弹出窗口,现在为您的代码?我认为它应该是一个弹出窗口而不是一个新选项卡。如果您不想在新标签页中显示按钮,只需在点击按钮时打开新标签的链接中添加一个url参数,如“?ispopup = false”。 – Surely
啊,谢谢,我的一个朋友说同样的事情 - URL参数方法运作良好。我已经将它添加为答案! –
只需将其作为url参数包含在弹出窗口中即可 –