2017-09-08 5 views
1

私の内線番号から読み込まれたiframeから、内線(バックグラウンドスクリプトまたはコンテンツスクリプト)にメッセージを送信しようとしています。 作成されたIframeは、コンテンツスクリプトを介して内線からロードされます。 作成されたiframeと拡張機能の間の通信、Google Chromeの拡張子

{ 
"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(インラインフレームをロード)

manifest.jsonを...私が通信する方法を探していますが、すべての私の試みは失敗した

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(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, "*"); 
} 

allurls.jsでハンドラ(コンテンツスクリプト)

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

のでiframe.jsからのメッセージがよく(警告によりprooved)が送信されますが、コンテンツのスクリプトは前にも、そこから何を受け取るん:

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

誰かが(私もtop.window.postmessageで試してみました)何が間違っているか、私は使用することができ、他のどのようなメッセージパッシングプロトコル見ることができますか?

+0

iframeの 'window'は、iframeのウィンドウを参照します。あなたは '親 'に送信する必要があります – wOxxOm

+0

ハムok私はそれを試みます、しかし、コンテンツスクリプトは、ページ内のすべてのiframeに行くことになっているので、私はまだそれが動作しない理由を理解していません。 –

+0

'Frame.js'はコンテンツスクリプトではなく、iframeスクリプトであり、拡張機能のコンテキストで動作します。 – wOxxOm

答えて

0

答えのためのTy wOxxOm、私は近くにあった:

だけframe.jsparentwindowを交換し、すべてが完璧に動作します。

iframe内に実行するコンテンツスクリプト、

Frame.jsは、コンテンツスクリプトでない場合であっても、それはインラインフレームスクリプトだと延長のコンテキストで実行されるため。

関連する問題