1

完全なhtmlが保存される変数があります。$ body = $ myhtmlpage;

<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をJavascripthtmlに渡すように準備する方法を教えてください。機能を試しhtmlspecialchars(json_encode($body)) ましたが、まだ問題があります。

Uncaught SyntaxError: Unexpected identifier 
4

4 に答える 4

3

多くのHTMLをJavascriptの文字列変数として機能させるために、長い戦いが必要になります。そのマークアップをマークアップの非表示のブロック(DIVなど)に配置してから、そのマークアップの内容を取得してウィンドウに表示する方がはるかに優れています。

これには、非表示のマークアップを検証できるという追加の利点があります。文字列変数に詰め込まれた多くのhtmlマークアップをデバッグするのは非常に困難ですが、実際のマークアップとしてDOMに含めると、作業がはるかに楽になります。

更新:いくつかのサンプルコードを追加します:

<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();
}
于 2012-05-21T10:12:37.907 に答える
2

まず、を使用する必要はありませんjson_encode()。これは状況を混乱させるだけです。

次に、問題はHTMLに引用符が含まれていることです。これにより、htmlspecialchars()引用符をエスケープしないため、出力するHTMLで構文エラーが発生します。

代わりhtmlentities()にフラグとともに使用してください。ENT_QUOTESしたがって、行を次のように変更します。

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

第三に(それが最も重要なポイントであるため、おそらく最初にあるはずですが)これに対するあなたのアプローチはすべて間違っています。新しいウィンドウを開く場合は、サーバーからページをロードし、ウィンドウが開いたときにHTMLを生成する必要があります。

于 2012-05-21T10:12:39.240 に答える
1

html内のphpコードの代わりに、phpコード内のhtmlコードを試すことができます。例えば

<?php
echo "<a onclick='openWin(\" ".htmlspecialchars(json_encode($body))." \")'>Click</a>";
?>
于 2012-05-21T10:20:01.040 に答える
0

これは、HTMLがJSONではないためです。そのためには、単に以下を使用します。htmlspecialchars($body)

于 2012-05-21T10:11:22.953 に答える