背景如何確定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參數包含在彈出窗口中即可 –