2012-05-21 65 views
0

我有一個變量,其中保存了一個完整的html。 $ body = $ myhtmlpage;將HTML傳遞給javascript函數

<a onclick="openWin(' <?php echo htmlspecialchars(json_encode($body)) ?>');" href="javascript:void(0);"> Click </a> 

我有這個JavaScript函數,它在新窗口中顯示文本。

<script type="text/javascript"> 
function openWin(str) 
{ 
myWindow=window.open('','','width=400,height=400'); 
myWindow.document.write(str+"<p>This is 'myWindow'</p>"); 
myWindow.focus(); 
} 
</script> 

當我的身體裏有簡單的文字時,它工作正常。但如果有一些HTML,那麼它不會顯示,我是JavaScript的新手。請告訴我如何準備我的HTML,它應該傳遞給Javascript html。我試過htmlspecialchars(json_encode($body)) 功能,但仍然有問題。

Uncaught SyntaxError: Unexpected identifier 

回答

1

首先,你並不需要使用json_encode(),這只是混亂的情況。

其次,問題在於您的HTML包含引號。這會導致您輸出的HTML語法錯誤,因爲htmlspecialchars()不會引號。

改爲使用htmlentities()而不是ENT_QUOTES標誌。所以行更改爲這樣:

<a onclick="openWin('<?php echo htmlentities($body, ENT_QUOTES) ?>');" href="javascript:void(0);">Click</a> 

第三(儘管它可能應該首先因爲它是最重要的一點),你的做法,這是完全錯誤的。如果打開一個新窗口,應該從服務器加載一個頁面,並在窗口打開時生成HTML。

0

這是因爲HTML不是JSON。對於那個簡單的使用:htmlspecialchars($body)

2

你將有一場長時間的戰鬥,試圖讓大量的HTML在JavaScript中作爲一個字符串變量工作。將標記放在標記中的隱藏塊(如DIV)中,然後獲取該標記的內容並將其顯示在窗口中會更好。

這有附加的好處,允許您的隱藏標記進行驗證。調試很多填充到字符串變量中的html標記是非常困難的,但是當將其作爲真正的標記包含在DOM中時,它會讓您的生活變得更加輕鬆。

UPDATE:添加一些示例代碼:

<div id="my_hidden_content" style="display:none;"> 
<?php echo $body; ?> 
</div> 

<a onclick="openWin('my_hidden_content');" href="javascript:void(0);"> Click </a> 

現在的javascript:

function openWin(contentId) 
{ 
    var contentContainer = document.getElementById(contentId); 
    var content = contentContainer.innerHTML; 
    myWindow=window.open('','','width=400,height=400'); 
    myWindow.document.write(content+"<p>This is 'myWindow'</p>"); 
    myWindow.focus(); 
} 
+0

+1爲更好的辦法... –

+0

完美,請你能不能請張貼一些代碼提示,更新添加代碼示例感謝 – Asghar

+0

。 – davidethell

1

你可以試一試php代碼裏面的html代碼,而不是html裏面的php代碼。例如對於例如

<?php 
echo "<a onclick='openWin(\" ".htmlspecialchars(json_encode($body))." \")'>Click</a>"; 
?>