window.open и $(document).ready

Я пытаюсь сделать букмарклет, который открывает всплывающее окно. Внутри этого окна находится список классов CSS, которые после выбора выделяют этот объект на window.opener странице. Итак, я столкнулся с двумя проблемами.

  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>

Если я добавлю следующее в консоль во всплывающем окне $(":input").click(function(){ alert($(window.opener.document).find("#test").html()) });, оно будет работать нормально, поэтому я уверен, что document.ready никогда не вызывается

Или есть лучший способ сделать это?


person Mottie    schedule 09.02.2010    source источник


Ответы (2)


Сработает ли $(document).ready, если вы добавите следующую строку перед return false?

testpopup.document.close();

Это дикая догадка, и я не проверял это.

person Aistina    schedule 09.02.2010
comment
Да, спасибо, это работает... знаете ли вы какой-нибудь способ просмотреть содержимое всплывающего окна с помощью Firebug? - person Mottie; 09.02.2010
comment
@fudgey Вы можете нажать F12, чтобы открыть Firebug (немного поздно, хахаха) - person LuisClemente; 15.06.2012

Действительно, 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;
}​

Это работает ..

[ОБНОВЛЕНИЕ] НО метод от Aistina — правильный путь.

person Gabriele Petrioli    schedule 09.02.2010