從內容腳本接收到消息後,我想創建一個新選項卡並填充它動態打開的頁面(現在我只是試圖打開新創建的頁面紅)。Chrome擴展程序:創建選項卡,然後將內容腳本注入它
eventPage.js:
這成功地創建了一個新的標籤和負載blankpage.html
(這僅僅是一個HTML頁面,一些文本)的罰款,但沒有繪製背景顏色爲紅色。在調試器中插入console.log()
聲明並在調試器中混淆之後,我確定調用了turnTabRed
,tab.id
的確是新創建的選項卡的ID,如果我從控制檯調用document.body.style.backgroundColor="red"
,則新選項卡的背景變成紅色。我注意到,如果我加入
(*)
chrome.tabs.query(
{}, function (tabArr) { for (var i = 0; tabArr[i]; i++)
console.log(tabArr[i].title); });
成turnTabRed
體內的新選項卡的標題將不被打印到控制檯,這表明腳本已被注入爲時尚早,所以我試着用setTimeout
延緩注入和時失敗,我試圖監聽狀態完成事件:
function turnTabRed(tab)
{
chrome.tabs.onUpdated.addListener(
function(tabUpdatedId, changeInfo, tabUpdated)
{
if (tabUpdatedId == tab.id && changeInfo.status &&
changeInfo.status == 'complete')
chrome.tabs.executeScript(
tabUpdatedId,
{code: 'document.body.style.backgroundColor="red"'});
});
}
這也失敗了。在等待setTimeout
後調用(*)確實會打印新標籤的標題以及所有其他標題。
怎麼了?我如何創建一個新標籤,加載一個HTML頁面,然後將其背景變成紅色?
運行'chrome.extension.getURL( 「blankpage.html」)'在控制檯返回'鉻擴展:///blankpage.html'(未'鉻://。 ..')和https://developer.chrome.com/extensions/match_patterns.html使用'chrome-extension:// */*'作爲示例模式;然而,如果我將該模式放在'permissions'下的清單中,則會發出警告:「Permission'chrome-extension:// */*'未知或URL模式格式錯誤」。將它放在content_scripts的'matches'屬性下也會導致加載擴展時出錯。你能指出一些闡明這一點的文件嗎? –
asnr
我仍然無法注入'blankpage.html',但我可以將消息從'blankpage.js'(HTML頁面的JavaScript)傳遞到擴展頁面以動態修改'blankpage.html'(這是我的原始目標),例如:chrome.runtime.sendMessage(),函數(response){document.body.style.backgroundcolor =「red」;});'。如果你修改你的答案,這表明這是一種解決方法,我很樂意接受它。 – asnr
啊......有趣......是'blankpage.js'從'blankpage.html'的html鏈接的JavaScript文件?還是內容腳本?如果你能夠將內容腳本注入到'chrome:// *'頁面,那麼在標籤創建回調中傳遞給新頁面內容腳本的消息可能是一個可行的解決方案嗎?這是一個非常有趣的問題......當我有機會時,我會研究更多的解決方案:)。 – berrberr