2012-05-06 15 views
38

Nie wiem, jak rozwiązać ten problem, próbowałem przeczytać wiele postów, ale nikt na nie nie odpowie.Dodaj treść do nowego otwartego okna

Potrzebuję otworzyć nowe okno ze stroną już zakodowaną (w tej samej domenie) i dodać trochę treści.

Problem polega na tym, że jeśli użyję OpenWindow.write(), strona nie zostanie jeszcze załadowana lub zastąpi wszystko i pojawi się tylko kod dodany podczas zapisu.

var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1'); 
OpenWindow.document.write(output); 

output to kod, który muszę dodać.

Potrzebuję go do pracy przynajmniej w Firefoksie, IE i GC.

Z góry dziękuję. Nie ma problemu, jeśli potrzebuję używać JQuery.

+1

Próbowałem również: \t \t \t \t \t \t \t \t OpenWindow.addEventListener ("onload" funkcja() { \t \t \t \t \t \t \t \t OpenWindow.content.body.innerHTML = "

hello world
"; \t \t \t \t \t \t \t \t} prawda); –

+1

Po wywołaniu funkcji w oknie podrzędnym nie można przekazać niczego w argumentach funkcji. Musisz po prostu wywołać childWin.function_name(). Jeśli wywołasz childWin.function_name (wyjście), to nie zadziała. Aby przekazać dane od rodzica do dziecka, zobacz http://stackoverflow.com/questions/2678133/pass-a-value- from-parent-to-child-open-window –

Odpowiedz

25

w parent.html:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var output = "data"; 
     var OpenWindow = window.open("child.html", "mywin", ''); 
     OpenWindow.dataFromParent = output; // dataFromParent is a variable in child.html 
     OpenWindow.init(); 
    }); 
</script> 

w child.html:

<script type="text/javascript"> 
    var dataFromParent;  
    function init() { 
     document.write(dataFromParent); 
    } 
</script> 
+1

Jak przekazać zmienną jquery/elemnts do strony podrzędnej od rodzica? @ Ray-cheng – azad

+0

Jak bezpieczne jest to? Nie przekazujesz danych za pośrednictwem adresu URL, ale czy może być gdzieś przechwycone? –

7

Oto co można spróbować

  • napisać funkcję powiedzieć init() wewnątrz mojastrona.html że zrobić coś HTML (dołącz czy co tam)
  • zamiast OpenWindow.document.write(output); wezwanie OpenWindow.init() gdy dom jest gotowy

więc okno rodzic będzie musiał

OpenWindow.onload = function(){ 
     OpenWindow.init('test'); 
    } 

i dziecka

function init(txt){ 
     $('#test').text(txt); 
    } 
+0

Otrzymuję "OpenWindow.init nie jest funkcją" błąd i zdefiniowałem funkcję:

+1

Sprawdź mój zaktualizowany kod – Sethunath

+0

OpenWindow.init(); Nigdy nie jest wykonywane :(Dzięki tak –

3

Po wywołaniu document.write po załadowaniu strony będzie to wyeliminować wszystkie treści i zastąpić ją z parametrem Ci zapewnić. Zamiast używać metod DOM, aby dodać treść, na przykład:

var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1'); 
var text = document.createTextNode('hi'); 
OpenWindow.document.body.appendChild(text); 

Jeśli chcesz użyć jQuery można dostać niektóre lepsze API do czynienia. Na przykład:

var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1'); 
$(OpenWindow.document.body).append('<p>hi</p>'); 

Jeśli potrzebny jest kod do uruchomienia po Nowym okna DOM jest gotowy spróbować:

var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1'); 
$(OpenWindow.document.body).ready(function() { 
    $(OpenWindow.document.body).append('<p>hi</p>'); 
}); 
+0

Nie działa, jeśli robię to podczas debugowania, nowe okno ma czas załadować i dodaje się "cześć", wszystko działa dobrze, ale w normalna sytuacja, "cześć" pojawia się jako pierwsza, a następnie strona jest ładowana nadpisując wszystko: S Dzięki za pomoc –

+0

Edytowałem moją odpowiedź, aby zawinąć kod w bloku $ (document) .ready. Wypróbuj. –

+0

To nie zadziałało dla mnie to, co działało, to - $ (printWindow) .on ('load', function() {$ (printWindow.document.body) .find ('# page-content'). html (printContent);}); – pwdst

47

gdy chcemy otworzyć nowy/okno zakładki (zależy od domyślnej konfiguracji przeglądarki):

output = 'Hello, World!'; 
window.open().document.write(output); 

Gdy wyjście jest Object i Chcesz uzyskać JSON, na przykład (można również wygenerować dowolny typ dokumentu, nawet obraz zakodowany w Base64)

output = ({a:1,b:'2'}); 
window.open('data:application/json;' + (window.btoa?'base64,'+btoa(JSON.stringify(output)):JSON.stringify(output))); 

Aktualizacja

Google Chrome (60.0.3112.90) blokują ten kod:

Not allowed to navigate top frame to data URL: data:application/json;base64,eyJhIjoxLCJiIjoiMiJ9

gdy chcesz dołączyć jakieś dane do istniejącej strony

output = '<h1>Hello, World!</h1>'; 
window.open('output.html').document.body.innerHTML += output; 

output = 'Hello, World!'; 
window.open('about:blank').document.body.innerText += output; 
+1

Moje popup został zablokowany przez chrome, a następnie 'document' nie działał, ponieważ' window.open' był niezdefiniowany. Upewnij się więc, że twoje wyskakujące okienko jest bezpośrednim wynikiem działania użytkownika. Więcej informacji tutaj: https://stackoverflow.com/questions/4602964/how-do-i-prevent-google-chrome-from-blocking-my-popup – Kayvar

2

Jeśli chcesz otworzyć stronę lub okno z wysyłania danych POST lub GET metody można użyć kodu:

$.ajax({ 
    type: "get", // or post method, your choice 
    url: yourFileForInclude.php, // any url in same origin 
    data: data, // data if you need send some data to page 
    success: function(msg){ 
       console.log(msg); // for checking 
       window.open('about:blank').document.body.innerHTML = msg; 
       } 
}); 
Powiązane problemy