window.open и $(document).ready
Я пытаюсь сделать букмарклет, который открывает всплывающее окно. Внутри этого окна находится список классов CSS, которые когда-то выбран, выделяет этот объект на window.opener
стр. Поэтому я сталкиваюсь с двумя проблемами.
- Firebug не работает во всплывающем окне, поэтому я не вижу, что происходит.
- Окно никогда не заканчивает загрузку (по крайней мере, я могу сказать в 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()) });
, он работает нормально, поэтому я уверен, что это документ. Уже никогда не вызывается
Или есть лучший способ сделать это?
2 ответа
Ли $(document).ready
огонь, если вы добавите следующую строку перед return false
?
testpopup.document.close();
Хотя это дикое предположение, и я не проверял это.
Действительно 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 - правильный путь.