2013-02-25 44 views
2

我一直在做打開一個新窗口,並書面方式HTML它與jQuery/JavaScript的一些研究,這似乎是正確的方式來做到這一點是:編寫HTML到一個新的窗口與JavaScript

創建新窗口

var w = window.open(); 

變量插入新的數據和工作變量

$(w.document.body).html(data); 

對我來說,這使得完整意義上的。然而,當我嘗試將這個併入我的腳本(「數據」是HTML的持有者)它不會打開一個新窗口...除非我只是錯過了一些簡單的東西,據我所知它看起來很棒。 ..

function newmore(str) { 
    var identifier = 4; 
    //get the history 
    $.post("ajaxQuery.php", { 
     identifier : identifier, 
     vanid : str 
    }, 
    //ajax query 
    function(data) { 
     //response is here 
     var w = window.open(); 
     $(w.document.body).html(data); 
    });//end ajax     
} 

任何想法?

P.S.似乎是在控制檯中沒有錯誤

+0

請不要使用彈出窗口。它們通常很煩人,即使根據請求打開時,也應考慮內聯「窗口」。 – ThiefMaster 2013-02-25 15:07:30

+1

這是爲了顯示公司的歷史,相信我我也不喜歡它,但是我再也不支付賬單。 :) – Nick 2013-02-25 15:08:26

回答

9

您的新窗口很可能被大多數瀏覽器中的彈出窗口阻止程序阻止。如果您創建新窗口是用戶操作(鍵,單擊)的直接結果,那麼瀏覽器通常不會阻止它。但是,如果你等到某個時間後(如ajax調用完成後),那麼它將被阻止,這可能是你的情況。

所以,修正通常是直接響應用戶事件創建窗口(不要等到ajax調用完成),將窗口句柄保存在變量中,然後將內容放入窗口中你的ajax調用完成後。

function newmore(str){ 
    var identifier = 4; 
    // create window immediately so it won't be blocked by popup blocker 
    var w = window.open(); 
    //get the history 
    $.post("ajaxQuery.php", { 
     identifier : identifier, 
     vanid : str 
    }, 
    //ajax query 
    function(data) { 
     //response is here 
     $(w.document.body).html(data); 

    });//end ajax     

} 
+0

坦率地說,工作的方式是愚蠢的,但這是問題所在。你會認爲我會馬上發現這些:/添加這些變化,看起來像修復了一下。謝謝:) – Nick 2013-02-25 15:28:27

+3

@尼克 - 是的,這是一個痛苦,但它也很難讓瀏覽器找出什麼是,什麼是不需要的廣告彈出窗口。錯誤在於最糟糕的廣告服務試圖通過這些彈出窗口來破壞我們的瀏覽體驗,並導致瀏覽器必須以這種方式進行響應。 – jfriend00 2013-02-25 15:31:05

+0

我看到它來自哪裏,一個人把它毀了給大家:)我可能會想出更多的疑難解答,但是您提供的代碼打開了一個新選項卡,但從未寫入數據。任何想法怎麼了?對不起,我的php本地即時通訊與jquery掙扎:p – Nick 2013-02-25 15:33:16

2

嘗試,而不是:

var w = window.open(); 
w.document.write(data); 

文檔對象的「innerHTML的」屬性(這是jQuery的.html()用途)代表HTML文檔,其中一個新的窗口沒有按沒有。即使這樣做,把一個完整的文檔放在裏面,HTML文檔並沒有什麼意義。這是一個新創建的文檔,所以你可以寫信給它。

+0

沒有區別,從我的ajax查詢返回的數據,但沒有新的窗口被發現,我知道一切正常,因爲我有數據更改div的內部html在一個點,現在我只是試圖打開一個新窗戶。 – Nick 2013-02-25 15:19:35

-1

這個代碼和平將工作:

var data = "<h1>Test</h1>"; 
var w = window.open("", "mywindow1", "width=350,height=150"); 
$(w.document.body).html(data); 

你必須打開新的窗口時,通知一些參數。

但是,如果可能的話,我幾乎不建議您使用另一種方式,例如jQuery UI或Twitter Bootstrap來做這件事,所以您不會使用彈出窗口。