3

Javascriptを使用して空白のウィンドウを開き、最小限のウィンドウを入力して、JQueryを含めるためのスクリプトタグを挿入していますが、ウィンドウプロパティreadyStateが読み込みを超えることはないため、JQueryがトリガーされることはありません。これがjsFiddleのデモです。ポップアップウィンドウがreadyStateを更新しない理由がわかりません。

var popup = window.open("", "popup", "height=500,width=700");
var doc = popup.document;
doc.write("<!doctype html><html><head></head><body></body></html>");
var script = doc.createElement("script");
script.type = "text/javascript";
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";
script.onload = function() {
  console.log(doc.readyState);
  popup.$(document).ready(function() {
    console.log(doc.readyState);
  });
}
doc.getElementsByTagName("head")[0].appendChild(script);

これは、JQueryを使用しない同様のコードです。readyStateウィンドウプロパティが「読み込み」を超えないという同じ問題があります。

var popup = window.open("", "popup", "height=500,width=700");
var doc = popup.document;
doc.write("<!doctype html><html><head></head><body></body></html>");
console.log(doc.readyState);
4

2 に答える 2

6

URLを設定したことがない場合、準備完了状態は変更されません。ブラウザに応じて、「初期化」または「ロード」のいずれかになります。次のコマンドのように、ポップアップウィンドウのコンソールウィンドウでdocument.locationを設定すると、この更新を確認できます。

console.log(document.readyState);
document.location = "http://yourdomain.com";
console.log(document.readyState);

ドメイン以外のドメインに場所を送信した場合、ウィンドウオブジェクトを変更するためのセキュリティはありません。これを回避する方法は、iframeを使用してソースを設定することです-次のように:

var nw = window.open('', "MyWindowID", "fullscreen=no, toolbar=no, menubar=no,status=no,location=no");
var html = '<iframe id="document-{aid}" style="width:100%;height:100%;" src="http://www.google.com"></iframe>';
nw.document.write(html);
nw.focus();

参照:https ://stackoverflow.com/a/1443839/1220302

これに関する注意は、ポップアップを$(popup)でラップして、readyイベントをフックすることです。

これはあなたのために働くはずです:

var popup = window.open("", "popup", "height=500,width=700");
var doc = popup.document;
doc.write("<!doctype html><html><head></head><body></body></html>");
var script = doc.createElement("script");
script.type = "text/javascript";
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";    
$(popup).ready(function(){
    console.log('loaded');
});
于 2012-07-12T14:31:10.350 に答える
1

へのURLがないのでpopup、すぐに準備完了です。コマンドが完了した後、jQuery を使用して "準備完了" への割り当てwindow.openは無関係になります。もう手遅れなので、発火することはありません。

于 2012-07-12T14:00:18.323 に答える