4

假設我想在Google Chrome瀏覽器擴展程序的彈出頁面中單擊按鈕時運行內容腳本?將彈出消息發送到內容腳本?

我曾嘗試以下:

//popup.js 
document.addEventListener('DOMContentLoaded', function() { 
    document.querySelector('button').addEventListener('click', clicked); 
    main(); 
}); 

function clicked(){ 
    chrome.tabs.getCurrent(
     function(tab){ 
      console.log(tab); 
      chrome.tabs.sendMessage(tab.id, "doSomething");  
     } 
    ); 
} 

而且在內容腳本:

chrome.extension.onMessage.addListener(
    function(message, sender, sendResponse){ 
     console.log("hello world"); 
    } 
); 

的問題是,在回調tabchrome.tabs.getCurrent()是不確定的。

回答

4

您是否爲manifest.json中的選項卡授予了權限,如此處所示。

"permissions": [ 
    "tabs" 
    ], 

而且tab.id它下面的代碼返回的是彈出式視圖(不是內容腳本TAB.ID)的

chrome.tabs.getCurrent(
     function(tab){ 
      console.log(tab); 
      chrome.tabs.sendMessage(tab.id, "doSomething");  
     } 
    ); 

如果你想將消息發送到你正在瀏覽的標籤使用下面的代碼的tab.id,它給出正確的結果

chrome.tabs.query({"status":"complete","windowId":chrome.windows.WINDOW_ID_CURRENT,"active":true}, function(tabs){ 
    console.log(JSON.stringify(tabs[0])); 
    console.log(tabs[0].id); 
}); 

讓我知道如果你需要更多的信息

+1

tabs.query返回一個數組。應該提到這種狀態是可選的。 ''windowId「:chrome.windows.WINDOW_ID_CURRENT'可以替換爲''currentWindow:true'看起來有點整潔。也許是一個tabs.getCurrent的鏈接,這樣他們可以重新讀取文檔,很多人都會遇到這樣的錯誤。 ..我確實做了很多次;) – PAEz

+0

@PAEz:我很感謝它使它完美..謝謝.. – Sudarshan

1

由@Sudarshan提供的答案是有效的,工作正常,但我剛剛發現了另一個解決方案,我的問題。只是以爲我把它放在這裏:

function clicked() { 
    chrome.tabs.executeScript(null, 
     {code:"console.log('hello world');"}); 
} 

它會注入並執行腳本。

相關問題