2

ポップアップ ウィンドウを開くブックマークレットを作成しようとしています。このウィンドウ内には CSS クラスのリストがあり、一度選択すると、そのオブジェクトがwindow.openerページ上で強調表示されます。だから私は2つの問題に直面しています。

  1. ポップアップ ウィンドウで Firebug が機能しないため、何が起こっているのかわかりません。
  2. ウィンドウの読み込みが終了しないため (少なくとも Firefox ではわかります) $(document).ready(function(){...})、ウィンドウ内が実行されることはありません。

クロス ドメインの問題が発生したため、リモートの場所からポップアップを開くことができません。サンプルコードは次のとおりです。

<script type="text/javascript">
function makepopup(){
 var popup = '<!DOC'+'TYPE HT'+'ML PUBLIC "-//W3C//DTD HT'+'ML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">' +
 '<ht'+'ml><he'+'ad><title>Test</title>' +
 '<scr'+'ipt type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></scr'+'ipt>' +
 '</he'+'ad><bo'+'dy>' +
 '<div id="wrap">' +
  'testing popup' +
 '</div>' +
 '<input type="button" value="Click Me" />' +
 '<scr'+'ipt type="text/javascript">' + 
 '$(document).ready(function(){' +
 '$(":input").click(function(){ alert($(window.opener.doc'+'ument).find("#test").html()) });' +
 '})' +
 '</scr'+'ipt>' +
 '</bo'+'dy></ht'+'ml>';
 var testpopup = window.open( '','test','toolbar=1,location=0,status=0,width=500,height=450,scrollbars=1' );
 testpopup.document.write(popup);
 return false;
}
</script>

<a href="#" onclick="javascript:makepopup()">Open popup</a>

<div id="test" style="display:none">This is hidden text</div>

popup のコンソールに次を追加すると、正常に$(":input").click(function(){ alert($(window.opener.document).find("#test").html()) });動作するので、 document.ready が呼び出されることはないと確信しています

または、これを行うより良い方法はありますか?

4

2 に答える 2

4

? の$(document).ready前に次の行を追加すると発火しreturn falseますか?

testpopup.document.close();

これは大雑把な推測ですが、私はこれをテストしていません。

于 2010-02-09T02:23:35.957 に答える
2

確かに、document.ready決して発火しません..(理由はわかりません..

ただし、html の後にスクリプトを追加document.readyし、その時点でドキュメントが常に読み込まれるため、..

function makepopup(){
 var popup = '<!DOC'+'TYPE HT'+'ML PUBLIC "-//W3C//DTD HT'+'ML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">' +
 '<ht'+'ml><he'+'ad><title>Test</title>' +
 '<scr'+'ipt type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></scr'+'ipt>' +
 '</he'+'ad><bo'+'dy>' +
 '<div id="wrap">' +
  'testing popup' +
 '</div>' +
 '<input type="button" value="Click Me" />'  +
 '</bo'+'dy></ht'+'ml>'+
 '<scr'+'ipt type="text/javascript">' + 
 '$(":input").click(function(){ alert($(window.opener.doc'+'ument).find("#test").html()) });' +
 '</scr'+'ipt>';
 var testpopup = window.open( '','test','toolbar=1,location=0,status=0,width=500,height=450,scrollbars=1' );
 testpopup.document.write(popup);
 return false;
}​

これは動作します..

[更新] しかし、アイスティナの方法は正しい方法です。

于 2010-02-09T02:20:03.723 に答える