2010-02-09 5 views
2

Я пытаюсь сделать букмарклет, который открывает всплывающее окно. Внутри этого окна находится список классов 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 никогда не называют

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

ответ

4

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

testpopup.document.close(); 

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

+0

Это действительно работает. +1 –

+0

Да, спасибо, это действительно работает ... знаете ли вы, каким образом посмотреть содержимое всплывающего окна с помощью Firebug? – Mottie

+1

@fudgey Вы можете нажать F12, чтобы открыть Firebug (немного позже хахаха) – LuisClemente

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; 
}​ 

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

[UPDATE] Остановить метод от Aistina - правильный путь.

+0

+1 Спасибо за понимание и попытку ответить;) – Mottie