tôi post đoạn code dưới đây:tin nhắn giữa kịch bản nội dung và trang nền trong một phần mở rộng chrome không hoạt động vì nó được coi là
manifest.json
{
"manifest_version": 2,
"name": "Demo",
"description": "all_frames test",
"version": "1.0",
"background": {
"scripts": ["background.js"]
},
"content_scripts": [{
"matches": ["*://*/*"],
"js": ["content.js"],
"all_frames": true
}],
"permissions": [
"tabs",
"*://*/*"
]
}
background.js
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
var tabStatus = changeInfo.status;
if (tabStatus == 'complete') {
function return_msg_callback() {
console.log('Got a msg from cs...')
}
chrome.tabs.sendMessage(tabId, {
text: 'hey_cs'
}, return_msg_callback);
}
});
content.js
/* Listen for messages */
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
/* If the received message has the expected format... */
if (msg.text && (msg.text == 'hey_cs')) {
console.log('Received a msg from bp...')
sendResponse('hey_bp');
}
});
Sau đó, nếu tôi truy cập trang web bao gồm iFrames nhiều dòng gốc, ví dụ: http://www.sport.es/ bạn sẽ thấy rằng tất cả iFrames trong trang đều nhận được thông báo từ trang nền nhưng chỉ một trong số đó có thể phản hồi lại. Đây có phải là hành vi bình thường không?
Cảm ơn trước vì câu trả lời của bạn.
Cho dù đó là tình huống bình thường, trích dẫn từ tài liệu: _Nếu nhiều trang đang nghe các sự kiện onMessage, chỉ người đầu tiên gọi sendResponse() cho một sự kiện cụ thể sẽ gửi phản hồi thành công.Tất cả các phản hồi khác cho sự kiện đó sẽ bị bỏ qua._ – Xan
@Xan Vì vậy, ở đây chúng tôi đang nói về tất cả các iFrames trong một trang ... do đó, theo tài liệu, tất cả các iFrames phải trả lời. Không? – jack
Vì vậy, những gì tôi muốn biết là nếu một iFrame được coi là một trang duy nhất? – jack