4

iframe で JavaScript を実行する次のコードがあります (この場合、アプリには常に 1 つの iframe しか含まれていないため、frames[0] です)。

js以下は、コア/純粋な JavaScript が含まれている場合に機能します。

var js = ""; // JavaScript code here
frames[0].window.eval(js);  

ただし、「js」に jQuery が含まれている場合は機能しません。

var js = ""; // JavaScript or jQuery code here
var preview = document.createElement('iframe_id');  
preview.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ;
document.body.appendChild(preview); 
frames[0].window.eval(js);  

jQueryでwindow.eval()に代わるものはありますか? .globalEval() があることは知っていますが、別の目的のためのようです。

4

5 に答える 5

1

その理由は、iframe が jquery ライブラリをロードしていない可能性があります。試す:

var js = ""; // JavaScript or jQuery code here
var preview = document.createElement('script');  
preview.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ;
frames[0].window.document.body.appendChild(preview); 
frames[0].window.eval(js);  
  • document.createElement('script'); それ以外のdocument.createElement('iframe_id');
  • この行frames[0].window.document.body.appendChild(preview);を実行して、iframe の jquery をロードします。
于 2013-09-04T06:15:13.517 に答える
1

jQuery 構文を使用するコードを評価する前に、jQuery スクリプトがロードされていることを確認する必要があります。このスレッドhttps://stackoverflow.com/a/6725358/937367をご覧ください。

function scriptTag(src, callback) {

    var s = document.createElement('script');
    s.type = 'text/' + (src.type || 'javascript');
    s.src = src.src || src;
    s.async = false;

    s.onreadystatechange = s.onload = function() {

        var state = s.readyState;

        if (!callback.done && (!state || /loaded|complete/.test(state))) {
            callback.done = true;
            callback();
        }
    };

    // use body if available. more safe in IE
    (document.body || head).appendChild(s);
}

以下のようにコールバック関数でコードを評価すると、すべてうまくいくはずです。

var js = ""; // JavaScript or jQuery code here
scriptTag("http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js", function(){
    frames[0].window.eval(js); 
});

ここでテストしましたhttp://jsfiddle.net/SFUbg/2/docその scriptTag 関数がドキュメントの代わりに使用された理由がわかりません。これは同等ではないため、変更しました。

于 2013-09-04T06:13:52.770 に答える
1

これは、jQuery がまだ読み込まれていないためです。iframe をアタッチするか、iframe をonloadチェックして、いつ読み込まれたかを確認できます。onreadystatechanged

于 2013-09-04T06:10:31.063 に答える
0

jQuery は独立した言語ではありません。コードが機能しない理由の少なくとも 1 つは、createElement が「iframe_id」ではないタグ名を取ることです。

また、iframe の src を直接 jQuery に設定しています。HTMLページまたはabout:blankに設定してから、何らかの方法でjQueryをロードする必要があります。これをロードする最も簡単な方法は、明示的なロード jQuery を使用して iframe URL を HTML ページに設定することです。

編集: iframe が既に存在し、読み込まれていて、それに jQuery を追加したいだけの場合は、Jan.J の回答が役立ちます。

于 2013-09-04T06:13:12.393 に答える