2013-04-08 34 views
9

Tôi vừa cập nhật tiện ích mở rộng chrome của mình lên json phiên bản 2 và đang cố gắng làm cho tiện ích của tôi hoạt động trở lại. Vấn đề là sendRequest đã được khấu hao trên đường đi. Vì vậy, tôi sao chép mã từ https://developer.chrome.com/extensions/messaging.html vào tập lệnh của tôi và sửa đổi nó thành tên biến của riêng tôi và nó không hoạt động.Lỗi gửi SendMessage của tiện ích mở rộng của Chrome từ tập lệnh nội dung lên nền html

Vì vậy, sau đó tôi quay lại và đưa vào mã ban đầu và nó vẫn không hoạt động. Tôi đã đọc nhiều câu hỏi tương tự [và hy vọng điều này sẽ không bị đóng lại như một bản sao, vì không có câu hỏi nào giống như tình huống của tôi].

manifest.json:

{ 
    "background": { 
     "page": "background.html" 
     }, 
    ... ... ... 
    "content_scripts": [ { 
     "css": [ "style.css" ], 
     "js": [ "jq.js", "script.js" ], 
     "matches": [ "http://*.craigslist.org/*/*.htm*" ] 
    } ], 
    ... ... ... 
    "permissions": [ "tabs", "http://*.craigslist.org/*/*.htm*" ], 
    "manifest_version": 2, 
    "update_url": "http://clients2.google.com/service/update2/crx", 
    "version": "3.0" 
} 

background.html:

<html> 
<script type='text/javascript'> 
    chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    console.log(sender.tab ? 
       "from a content script:" + sender.tab.url : 
       "from the extension"); 
    if (request.greeting == "hello") 
     sendResponse({farewell: "goodbye"}); 
    }); 
    }); 
</script> 
</html> 

script.js:

chrome.runtime.sendMessage({greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
}); 

Bây giờ tôi ru na trang [trên craigslist], và đi đến Console và đây là lỗi:

Port error: Could not establish connection. Receiving end does not exist. 
TypeError: Cannot read property 'farewell' of undefined 
    at chrome-extension://dhmjefbokfkjpdbigkadjpgjeflchgea/script.js:9:23 

tôi sử dụng Chrome Beta trên Ubuntu 12.10 64-bit (Google Chrome: 27.0.1453.15 (Official Build 191.758) beta)

+0

Bạn cần phải di chuyển mã nội tuyến vào một tập tin bên ngoài. Câu hỏi này đã được hỏi trước, và một câu trả lời chi tiết được cung cấp. –

+0

có thể trùng lặp với [Lỗi cổng trong khi thay đổi tiện ích chrome từ tệp kê khai thành v1 thành v2] (http://stackoverflow.com/questions/11913575/port-error-while-changing-chrome-extension-from-manifest-v1-to- v2) –

Trả lời

30

Bạn đang gửi thư từ cả nền và tập lệnh nội dung, nhưng không cố gắng nhận chúng. Hãy thử nghe tin nhắn ở một hoặc cả hai địa điểm đó. Ngoài ra, mã nội tuyến là against the CSP để di chuyển tất cả sang tệp bên ngoài.

Ví dụ:

manifest.json

"background": { 
    "scripts": ["background.js"] 
}, 

background.js

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){ 
    sendResponse({farewell:"goodbye"}); 
}); 

script.js

chrome.runtime.sendMessage({greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
}); 

Ngoài ra, chrome.tabs.getSelected() cũng không được dùng nữa, vì vậy hãy sử dụng chrome.tabs.query() để thay thế.

+0

Ok Tôi vừa chỉnh sửa mã của mình trong cả background.html và tập lệnh.js, nhưng tôi vẫn nhận được lỗi! – Matt

+0

Tôi đã tắt mã của Google. lol. Tôi liên kết trực tiếp với nó. Dù sao đi nữa, hãy để tôi thử điều đó ... trên suy nghĩ thứ hai, tôi thậm chí không chắc chắn làm thế nào để tạo ra một nền JS. Trừ khi bạn có nghĩa là nội dung-kịch bản. Tôi đã có. Vấn đề, nội dung-script không thể truy cập localStorage, do đó sử dụng HTML nền để truy cập localStorage và gửi nó qua một tin nhắn. – Matt

+0

Ohh .. ok Tôi sẽ thử điều đó. – Matt

0

kịch bản nền

chrome.tabs.getAllInWindow(null, function(tabs) { 
     $.each(tabs, function() { 
     chrome.tabs.sendRequest(this.id, {"action":"action_name"}); 
     }); 
    }); 

nội dung kịch bản

chrome.extension.onRequest.addListener(function(request, sender, sendResponse){ 
    if(request.action === 'action_name') 
    { 
    alert('handle event in the content script!!!!') 
    } 
}); 
+0

Lỗi khi phản hồi tabs.getAllInWindow: Lỗi: Giá trị không hợp lệ cho đối số 1. Giá trị không được nhỏ hơn 0. –

+0

@Olek, Mã của bạn đang gửi thư từ bg đến contentcript thay vì viceversa – Pacerier

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