5

別のドメインにある iFrame にアップロード スクリプトがあります。dataiFrame が埋め込まれているページにファイルのアップロードを送信しようとしています。

iFrame (アップロード スクリプト) に次のコードがあります。

$('#file_upload').uploadify({
   //JS CODE
   'onUploadSuccess' : function(file, data, response) {
      data //data is what must be passed from the iFrame to the script on another site 
   } 
});

dataは、別のドメインの次のスクリプトに渡す必要があるものです。

var myframe, nestedFrame;
myFrame = $('#editorf').contents().find('body');
nestedFrame = myFrame.find('#re_contentIframe').contents().find('body');
nestedFrame.append('data'); //data should be replaced with the information from the iFrame

私は次のコードを試みました:

iFrame コード - ページ B

$('#file_upload').uploadify({
   //JS CODE for UPLOADIFY
'onUploadSuccess' : function(file, data, response) {
    window.postMessage('http://iframe-domain.net/uploads/' + data,'http://iframe-domain.net');
        } 
    });

ページ コードの受信 - ページ A

$(function() {
    window.addEventListener('message', receiver, false);

    function receiver(e){
        if (e.origin == 'http://iframe-domain.net'){
            var myframe, nestedFrame;
            myFrame = $('#editorf').contents().find('body');
            nestedFrame = myFrame.find('#re_contentIframe').contents().find('body');
            nestedFrame.append(e.data);
        }
    }
});

これはうまくいきません。次のエラー メッセージが表示されます。

Error: Permission denied to access property 'toString'
...a);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$...

jquery.uploadify.js (line 17)

ファイルがアップロードされると、uploadify スクリプトは機能しますが、ページにデータを渡すようには見えません。このエラーがページが機能しない理由であるとは確信できません。

どうすればいいですか?

編集

ここでよりよく説明するために、例を示します。

ユーザーがページ A (メイン ページ) に移動します。ページ A では、そのページに iFrame が埋め込まれています。iFrame 内には、ユーザーがファイルをアップロードできるようにするための uploadify スクリプトがあります。

ユーザーがファイルをアップロードすると、uploadify スクリプトがファイル名を返します。例: 528050f030522.jpg. uploadify スクリプトがこの情報を取得すると、それをページ A のスクリプトに送信し、ページ A のスクリプトが実行され、ファイル名がページに挿入されます。

4

3 に答える 3

1

iframe には がありますがwindow.postMessage(URL,sendingOrgin)、別のウィンドウにデータを送信する方法ではありません。このページを正しく理解している場合は、代わりに を使用してくださいotherwindow.postMessage(data,receivingOrigin)

そのため、最初に (iframe 内で) 新しい iFrame を作成し、onload イベントハンドラーを指定して、ロードされたらそのウィンドウで postMessage メソッドを呼び出します。このようなもの

var iframe=document.createElement("iframe");
iframe.onload=function(){
    iframe.contentWindow.postMessage(data,"http://receivingdomain.com");
}
iframe.src="http://receivingdomain.com/receivingPage.html"

編集: また、情報を一方向 (および iframe ごとに 1 回) だけ送信したい場合は、URLhttp://receivingdomain.com/receivingPage.html?data=...を使用して iframe を開き、受信ページで独自の window.location を読み取る方がはるかに簡単であることに注意してください。データを抽出します...

于 2013-11-14T06:32:01.913 に答える