2010-10-21 33 views
7

JavaScript/jQuery'de küçük bir proje üzerinde çalışıyorum. Böyle Im kullanarak kodu:jquery'yi kullanarak yeni pencere oluştur

var resultwindow = window.open('result.html') 
var doc = $('body', resultwindow.document); 
doc.append("<p>Result</p>") 

javascript yapılan bir hesaplamaya sonuçlarını görüntülemek için, ben sonuçlarını görüntülemek için bu içeriği bazı önceden tanımlanmış içerikli yeni bir pencere açmak ve değiştirmek istediğiniz

İçeriği eklediğimde, sonuç belgesinin henüz yüklenmediğinden bu işe yaramıyor, dolayısıyla 'result.html' içeriğinin üzerine yazılıyor.

Ben de

$(resultwindow.document).ready(function() { 
    // ... Fill result document here 
}) 

ve

$(resultwindow.document).load(function() { 
    // ... Fill result document here 
}) 

çalıştı ama ready() (Geçerli belgede zaten yüklü ise o hemen denir) geçerli belge üzerinde çalışır ve load değil hiç çağrıldım.

Belki de birisi bana doğru yöne işaret edebilir. Şimdiden teşekkürler!

DÜZENLEME: Ben de aynı şeyi yapmak olsaydı

w = window.open('','newwinow','width=800,height=600,menubar=1,status=0,scrollbars=1,resizable=1); 
d = w.document.open("text/html","replace"); 
d.writeln('<html><head>' + 
    '<link rel="stylesheet" type="text/css" href="style.cs"/></head>' + 
    +'<body></body></html>'); 
// use d to manipulate DOM of new document and display results 

bugün (tecrübe iki yıl:

Sonunda gibi JavaScript "elle" yeni bir belge oluşturarak bu çözüldü Daha sonra), bir şablonu sürdürmek ve javscript'e derlemek için Handlebars gibi bazı Javascript şablon kitaplığını kullanırdım.

+0

Martin bu işe yarar mı? Benzer bir sorunum var. – Shaunak

+0

@Shaunak İki yıl önce çözümümüzü soruyu düzenleme olarak yayınladım, ayrıca bugün nasıl çözeceğimi de belirttim ... hth. – MartinStettner

cevap

0

Verileri, querystring'de result.html dosyasına gönderin ve sonra result.html verileri buradan görüntüleyin. Bu konuda daha az belirgin olmak istiyorsanız, sorgudaki verileri toplayabilir ve sonuç sayfasından vazgeçebilirsiniz.

+0

Yazılım ayrıca, dosya sisteminden (yani, herhangi bir web sunucusundan) de çevrimdışı çalışmalıdır. Bu nedenle öneriniz bir seçenek değil, bence. Yine de teşekkürler. – MartinStettner

+0

Neden bir web sayfası veya bir çeşit web sunucusunda yaşamamış bir dizi web sayfası oluşturmak istediğinize emin değilsiniz. – Harv

1

Sahip olduğunuz sorun, load()'un düşündüğünüz şeyi yapmamasıdır. Bunun yerine,kullanın, daha sonra her şey çalışmalıdır.


düzeltme:

load() çift kullanımı işlev gerçekten - bu ilk parametre olarak bir işlev ile denir ise, o zaman nesnenin yük durumunda bunu bağlayan (veya nesneler), aksi takdirde, iade edilen verileri (varsa) söz konusu öğelere yükler. Bunun neden çalışmadığını görmek için Josh'un cevabını gerçek nedenine bakın.

+1

Yanlış. JQuery'deki ['load'] (http://api.jquery.com/load-event/) yeterince akıllıdır. Geçilen parametrelere bağlı olarak tetiklenir. Bu nedenle, yalnızca bir işlevden geçerseniz, onload olayını kastettiğinizi bilir. Bir AJAX çağrısı için gerekli tüm parametreleri iletirseniz, bunu yapar. –

+0

Yani, yanlış mı yoksa sadece sözdizimsel olarak mı daha uzun? – Harv

+0

@Harv Yanlış. Yük OP için iyi çalışmalıydı ve yapmadığı bir sebep var. Detaylı bir açıklama için cevabımı görün. –

2

load numaralı aramanız, document yükünü işlemeye çalıştığınız için çalışmaz ve bu noktada belge bile bulunmuyor. Bu, nQuery'ye boş değer aktardığınız ve sizi görmezden geldiğiniz anlamına gelir. Ham pencere başvurusunun yük olayını yerine getirin ve o zaman iyi gitmelisiniz ...

var win = window.open("result.html"); 
$(win).load(function() { 
    $("body").append("<p>Result</p>"); 
}); 
+0

Maalesef, olay işleyicisi hiçbir zaman aranmaz. Ayrıca hata ayıklayıcı, en azından Chrome'da - belge nesnesinin zaten var olduğunu, ancak boş olduğunu ("boş:" hakkında) ortaya çıkardığını gösterir. – MartinStettner

İlgili konular