2012-05-06 28 views
38

我不知道如何解決此問題,我嘗試閱讀許多帖子,但沒有人回答它。將內容添加到新的打開窗口

我需要打開一個新窗口,頁面已經編碼(在同一個域內)並添加一些內容。

問題是,如果我使用OpenWindow.write()頁面尚未加載或它覆蓋了所有內容,並且只有通過寫入添加的代碼纔會出現。

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

output是我需要追加的代碼。

我需要它至少在Firefox,IE和GC上工作。

在此先感謝。如果我需要使用JQuery,這不是問題。

+1

我試過,以及:\t \t \t \t \t \t \t \t OpenWindow.addEventListener( 「的onload」,函數(){ \t \t \t \t \t \t \t \t OpenWindow.content.body.innerHTML = 「

hello world
」; \t \t \t \t \t \t \t \t},true); –

+1

在子窗口中調用函數時,不能在函數參數中傳遞任何東西。你必須調用childWin.function_name()。如果您調用childWin.function_name(輸出),它將不起作用。爲了將數據從父項傳遞給子項,請參閱http://stackoverflow.com/questions/2678133/pass-a-value-from-parent-to-child-open-window –

回答

25
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> 

child.html

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

如何將jQuery變量/元素從父級傳遞給子頁面?@ ray-cheng – azad

+0

這是多麼安全?您沒有通過URL傳遞數據,但是可能會在某處進行截取? –

7

這裏是你可以嘗試什麼

  • 寫一個函數說的init()內的mypage.html是做事情的HTML(追加或什麼都)的
  • 代替OpenWindow.document.write(output);呼叫OpenWindow.init()當DOM準備

所以父窗口將具有

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

和孩子

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

我得到「OpenWindow.init不是函數」錯誤和我已經定義的函數:

+1

請檢查我的更新代碼 – Sethunath

+0

OpenWindow.init(); 永遠不會執行:(因爲無論如何 –

3

當你調用一個document.write加載頁之後,將消除所有內容,並與您提供的參數替換它。相反,使用DOM方法來添加內容,例如:

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

如果你想使用jQuery,你會得到一些更好的API來處理。例如:

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

如果您需要的代碼的新窗口中的DOM後運行準備嘗試:

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

它不工作,如果我在調試時做,新窗口有時間加載和「嗨」添加,工作一切正常,但在一個正常情況下,「嗨」先出現,然後頁面加載覆蓋everthing:S感謝您的幫助 –

+0

我編輯我的答案將代碼包裝在一個$(document).ready塊。試試。 –

+0

這沒有奏效對我來說,工作是什麼 - $(printWindow).on('load',function(){$(printWindow.document.body).find('#page-content')。html(printContent);}); – pwdst

47

當你想打開新的標籤頁/窗口(取決於您的瀏覽器默認配置):

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

當輸出爲Object和你想得到JSON,例如(也可以生成任何類型的文件,甚至在Base64編碼的圖像)

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

更新

谷歌瀏覽器(60.0.3112.90)阻止該代碼:當你想將一些數據追加到現有頁面

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

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

我的彈出窗口被chrome阻塞了,然後'document'沒有工作,因爲'window.open'沒有定義。所以請確保您的彈出窗口是用戶操作的直接結果。欲瞭解更多閱讀:https://stackoverflow.com/questions/4602964/how-do-i-prevent-google-chrome-from-blocking-my-popup – Kayvar

2

如果你想打開一個網頁或窗口,將數據發送POST或GET方法,你可以使用這樣的代碼:

$.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; 
       } 
});