2012-08-04 27 views
7

Khi cố gắng để giao tiếp giữa trang nội dung và Bối cảnh của tôi Script tôi nhận được các lỗi sau đây:Tiện ích mở rộng của Chrome: Lỗi cổng: Không thể thiết lập kết nối. Kết thúc nhận không tồn tại.

Port error: Could not establish connection. Receiving end does not exist. 
Error in event handler for 'undefined': Cannot read property 'message' of undefined  
TypeError: Cannot read property 'message' of undefined 

background.js

function onRequest(request, sender, callbackFunction) { 
    console.log("Me (BS) became this Message:" + request.message); 
    sendResponse({message: request.message}) 
}; 
chrome.extension.onRequest.addListener(onRequest); 

streamcloud.js

function contactBackground(nachricht){ 
    chrome.extension.sendMessage({message: nachricht}, function(response) { 
     console.log("The Background Script got the following Message: " + response.message); 
    }); 
} 

và số manifest.jso của tôi n

{ 
    "name": "InstantWatch - Dev", 
    "manifest_version": 2, 
    "version": "0.7", 
    "permissions": ["tabs", "http://*/", "https://*/"], 
    "background": { 
    "scripts": ["background.js"] 
    }, 
    "browser_action": { 
    "default_title": "InstantWatch", 
    "default_icon" : "icon.ico" 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["http://*/*", "http://*/*"], 
     "js": ["jquery.js", "streamcloud.js"] 
    } 
    ] 
} 

tôi tìm thấy giải pháp cho thêm một BACKGROUND_PAGE: "background.html" với một background.html trống rỗng, nhưng kể từ khi BACKGROUND_PAGE không được hỗ trợ từ manifest_version: 2, tôi không thể sử dụng.

+0

Một cách khác, trong đó giải quyết vấn đề của tôi với chính xác lỗi này giống nhau: http://stackoverflow.com/a/13565529/390747 – WooCaSh

Trả lời

20

sendMessageonRequestkhông tương thích.

Nếu bạn cần hỗ trợ Chrome 19 và trước đó, sử dụng onRequestsendRequest:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    // Warning: Chrome 19- [receiver] 
}); 
chrome.extension.sendRequest(message, optional_sendResponse); 

Đối Chrome 20-25, sử dụng chrome.extension.onMessagechrome.extension.sendMessage:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
    // Chrome 20+ 
}); 
chrome.extension.sendMessage(message, optional_sendResponse); 

Đối Chrome hơn 26, sử dụng chrome.runtime.onMessagechrome.runtime.sendMessage.


Lưu ý: Kể từ Chrome 26, phương pháp không dùng nữa vẫn được hỗ trợ, mặc dù không có giấy tờ. Nếu bạn có cơ hội, hãy cập nhật tiện ích của bạn để sử dụng các phương pháp mới, để đảm bảo rằng tiện ích mở rộng của bạn sẽ vẫn hoạt động trong tương lai.
Xem this answer để tạo mã tương thích với Chrome 20+.

+2

+1 để chỉ ra lỗi trong tài liệu .. !!! – Amila

3

Thay vì

chrome.extension.onRequest.addListener(onRequest); 

Sử dụng

chrome.extension.onMessage.addListener(onRequest); 

Vì bạn đang sử dụng SendMessage và không sendRequest.

Phân tích cú pháp thư đã được cập nhật trong phiên bản Chrome mới. sendRequest và onRequest không được chấp nhận. Bạn nên đi với sendMessage và onMessage.

Tham khảo tài liệu cho message parsing between Content Script and Background.

+1

này áp dụng cho Chrome 20-25. Trong Chrome 26, API lại thay đổi. Xem [Câu trả lời của Rob W cho câu hỏi này] (http://stackoverflow.com/a/11811936/3345375) cũng như [câu trả lời của peterthinking cho một câu hỏi tương tự] (http://stackoverflow.com/a/18131296/3345375) . – jkdev

Các vấn đề liên quan