2013-01-19 56 views
2

我試圖通過這裏發佈類似的問題進行瀏覽,但沒有一個似乎工作Chrome擴展端口錯誤:無法建立連接。接收端不存在

的manifest.json

{ 
    "manifest_version": 2, 
    "name" : "A simple Found Text Demo", 
    "description" : "Bla", 
    "version" : "1.0", 
    "background" : { 
     "pages" : "background.html" 
    }, 
    "page_action" : { 
     "default_icon" : "icon.png" 
    }, 

    "content_scripts" : [{ 
     "matches" : ["*://*/*"], 
     "js" : ["contentscript.js"] 
    }] 
} 

Background.html

<html> 
<script> 
    chrome.extension.onMessage.addListener(
      function(request, sender, sendResponse){ 
      alert(request); 

    //chrome.pageAction.show(sender.tab.id); 
      sendResponse('Found!'); 
      } 
    ) 
</script> 
</html> 

Contentscript.js

chrome.extension.sendMessage({"name" : "hola"}, function(res){ 
    console.log(res); }) 

但是我重複得到相同的錯誤:

Port error: Could not establish connection. Receiving end does not exist. 

任何想法?

+0

這種情況在每次加載網頁上? – Ragnarokkr

+0

是的,不要認爲這是重要的,我幾乎允許任何頁面調用此擴展(*:// */*) –

+0

它很重要,因爲僞協議('chrome:','file:', 'view:'...)不允許注射,他們可能會產生類似你的錯誤。這就是我問它的原因。但是,@ RocketDonkey是正確的。清單版本2不允許內聯腳本。 – Ragnarokkr

回答

5

既然事情發生了變化到manifest 2,你實際上是不再允許使用行腳本(比如你在上面的<script>標籤的background.html什麼。見here)。我不確定你的用例,但在大多數情況下,簡單的情況下(閱讀:我做的東西:)),你實際上不需要用任何東西填充background.html。相反,您可以直接傳入一個background.js文件,該文件將包含上述相同的腳本。因此,你可以嘗試改變你的manifest.json這樣的:我們在這裏做了兩件事

{ 
    "manifest_version": 2, 
    "name" : "A simple Found Text Demo", 
    "description" : "Bla", 
    "version" : "1.0", 
    "background" : { 
     "scripts" : ["background.js"] 
    }, 
    "page_action" : { 
     "default_icon" : "icon.png" 
    }, 

    "content_scripts" : [{ 
     "matches" : ["*://*/*"], 
     "js" : ["contentscript.js"], 
     "run_at": "document_end" 
    }] 
} 

注 - 改變pagesscriptsbackground內,並指出["background.js"],然後加入"run_at": "document_end"content_scripts節結束。這是一定會導致問題,如果被排除(問題類似於你現在看到的) - 你現在告訴內容腳本在頁面加載後運行。如果它立即運行,就會冒着後臺頁面未加載的風險,這意味着它尚未準備好接收消息並給您提供連接錯誤。下面是background.js,這等同於你之前,你的<script>標籤之間有腳本:

chrome.extension.onMessage.addListener(
     function(request, sender, sendResponse){ 
     alert(request); 

//chrome.pageAction.show(sender.tab.id); 
     sendResponse('Found!'); 
     } 
) 
+0

謝謝,按預期工作! –

+1

@AshwiniKhare完全不用擔心 - 我記得那個開關把各種扳手扔在齒輪上給我:)祝你好運。 – RocketDonkey

相關問題