【发布时间】:2015-05-02 01:38:31
【问题描述】:
背景
我有一个带有浏览器操作的 Chrome 扩展程序,可以在新标签页中启动 index.html。
我想更新扩展程序以首先在 popup 中打开 index.html,然后包含一个按钮,用户可以单击以选择在新标签中打开应用程序。
我不希望这个按钮在它不是弹出窗口时显示(因为它没有意义),这意味着内容脚本需要知道它是否是弹出窗口才能显示按钮。
问题
这是一个两部分的问题:
- Chrome 扩展弹出窗口如何知道它是弹出窗口?
- 如何在呈现弹出窗口之前将该信息传递给内容脚本?
我的尝试
我尝试在background.js 中使用chrome.extension.getViews 来首先确定弹出窗口是否打开。然后,我向内容脚本发送一条消息,然后显示该按钮。但是我还没有让它工作 - 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”。
-
啊,谢谢,我的一个朋友也说了同样的话——URL 参数方法效果很好。我已将其添加为答案!
-
只需将其作为 url 参数包含到弹出窗口中
标签: javascript google-chrome google-chrome-extension