inserisco il codice qui sotto:messaggistica tra la trascrizione dei contenuti e lo sfondo della pagina in un'estensione Chrome non funziona come dovrebbe essere
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');
}
});
Quindi, se vado in un sito che include iFrame di origine incrociata multipli, ad es. http://www.sport.es/, si vedrà che tutti gli iFrame all'interno della pagina ricevono il messaggio dalla pagina di sfondo ma solo uno di essi è in grado di rispondere. È un comportamento normale?
Grazie in anticipo per la risposta.
Se si tratta di una situazione normale, una citazione dai documenti: _Se più pagine sono in ascolto di eventi onMessage, solo il primo a chiamare sendResponse() per un particolare evento riuscirà a inviare la risposta.Tutte le altre risposte a quell'evento saranno ignorate._ – Xan
@Xan Quindi qui stiamo parlando di tutti gli iFrame in una pagina ... così come per i documenti, tutti gli iFrame devono rispondere. no? – jack
Quindi quello che voglio sapere è se un iFrame è considerato come una singola pagina? – jack