2013-04-29 43 views
2

我已經讀過所有相關的錯誤,我認爲這種情況有點不同。我試圖從後臺上下文發送消息到內容腳本。例如。chrome.tabs.sendMessage:「端口錯誤:無法建立連接。接收端不存在「僅在緩存頁面上

chrome.tabs.query({ 
    currentWindow: true, 
    active: true 
}, function(tabs){ 
    chrome.tabs.sendMessage(tabs[0].id, { 
     name: name, 
     args: args 
    }, function(response){ 
     if (!response) return callback('You tried to message a tab that does not exist'); 
    }); 
}); 

如果安裝了擴展前的開放標籤加載,這將拋出一個Port error。要重新創建:

  1. 打開一個新的標籤,加載網頁
  2. 導航到擴展選項卡,並重新加載本地解壓擴展
  3. 導航回到網絡選項卡,並通過瀏覽器調用行動爲延長 - 除非手動重新加載網頁,否則會拋出Port error

有沒有解決方法?

回答

2

而是發送消息,programatically insert a content script和使用回調的結果:

chrome.tabs.query({ 
    currentWindow: true, 
    active: true 
}, function(tabs) { 
    chrome.tabs.executeScript(tabs[0].id, { 
     code: 'location.href', 
     runAt: 'document_start', 
     allFrames: false  // Run at the top-level frame only to get 
           // just one result 
    }, function(results) { 
     var result = results[0]; 
     console.log(result); // Example 
    }); 
}); 

在一個字符串specifiying代碼代替,您也可以通過使用file: 'code.js'代替code: '...'運行文件。

+0

謝謝,我擔心可能是這種情況。也許你非常熟悉 - 如果用戶在同一個標​​籤頁/網址上反覆調用瀏覽器操作,腳本是否會在該頁面上重複執行,從而導致重複的消息? – 2013-04-29 12:58:51

+0

@ChristopherCliff是的,但是你可以保存一個變量來查看腳本是否已經運行。例如:https://github.com/Rob--W/pdf.js/blob/57e623/extensions/chrome/insertviewer.js#L126-L128 – 2013-04-29 13:06:38

+0

非常好,謝謝! – 2013-04-29 15:39:25

相關問題