2017-09-08 1 views
1

J'essaye d'envoyer un message depuis un iframe chargé depuis mon extension vers mon extension (script d'arrière-plan ou script de contenu). L'Iframe créé est chargé à partir de l'extension via un script de contenu. Je suis à la recherche d'un moyen de communiquer, mais toutes mes tentatives ratées ...Communication entre l'iframe créé et l'extension, google chrome extension

manifest.json

{ 
"author": "***********", 
"background": { 
    "page": "back/background.html", 
    "persistent": true 
}, 
"browser_action": { 
    "default_title": "***", 
    "default_popup": "./popup/popup.html" 
}, 
"content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["./content/allurls.js"], 
     "all_frames":true 
    }, 
    { 
     "matches": ["<all_urls>"], 
     "js": ["./banner/confirm_banner.js"] 
    } 
], 
"web_accessible_resources": [ 
    "frame.html" 
], 
"description": "oui", 
"manifest_version": 2, 
"name": "***", 
"permissions": ["tabs"], 
"version": "1.0" 
} 

Confirm_banner.js (charger le iframe)

var extensionOrigin = 'chrome-extension://' + chrome.runtime.id; 

window.onload = load_iframe(); 

function load_iframe() 
{ 
if (!location.ancestorOrigins.contains(extensionOrigin)) 
{ 
    var iframe = document.createElement('iframe'); 
    iframe.src = chrome.runtime.getURL('../frame.html'); 
    iframe.style.cssText = 'position:fixed;top:0;left:0;display:block;' + 
          'width:100%;height:40px;'; 
    document.body.appendChild(iframe); 
} 
} 

Frame.js (script lié à frame.html)

$(document).ready(function() 
{ 
    $('#jamais').click(function() 
    { 
     send_message("BANNER", "jamais"); 
     alert("send"); 
    }); 
}); 

function send_message(type, data) 
{ 
    var msg = { 
     type: type, 
     data: data 
    }; 
    window.postMessage(msg, "*"); 
} 

Handler allurls.js (script contenu)

window.addEventListener('message', function(event) { 
    if (event.data.type && (event.data.type === 'BANNER')) 
    { 
     alert("ouimonsieur"); 
    } 
}); 

Le message de iframe.js est bien envoyé (prooved par l'alerte) mais le script de contenu ne recieve de lui, avant même le:

if (event.data.type && (event.data.type === 'BANNER')) 

quelqu'un peut-il voir ce qui est faux ou quel autre protocole de transmission de message i peut utiliser (i aussi essayé avec top.window.postmessage)?

+0

'window' dans l'iframe fait référence à la fenêtre d'iframe. Vous devez envoyer à 'parent' – wOxxOm

+0

hum ok je vais essayer, mais le script de contenu est supposé aller dans tous les iframe de la page, donc je ne comprends toujours pas pourquoi cela ne fonctionne pas. –

+0

'Frame.js' n'est pas un script de contenu, c'est un script iframe qui s'exécute dans le contexte de l'extension. – wOxxOm

Répondre

0

Ty wOxxOm pour la réponse, j'étais proche:

vient remplacer window par parent dans frame.js et tout fonctionne parfaitement.

Parce que même si le script de contenu exécuter dans iframe,

Frame.js est pas un script de contenu, il est un script iFrame et exécute dans le contexte de l'extension.