0

次のような行があり、onLoad 関数のパラメーターがエラーを報告しています。

document.write("document.getElementById(\"my_iframe\").innerHTML = '<iframe src=\"http://MyDomain.com/index.php?accessing_from=\'+loc+\'\" style=\"border: none; min-height: 60px;\" onload=\"resizeCrossDomainIframe(\'iframe\', \'http://MyDomain.com\');\"> </iframe>'  ");

気になる部分はonload=\"resizeCrossDomainIframe(\'iframe\', \'http://MyDomain.com\');\"

このセットアップでエラーが発生しますが、関数パラメーターを削除してすべてが正常に機能するようにそのままにしておくとresizeCrossDomainIframe() (ドキュメントの作成に関しては、関数はパラメーターを渡していないため機能しません)、私の質問は、パラメーターのときにこれが機能しない理由です。エスケープされますか?

----------------------編集済み------------------------

わかりました、MyDomain.com には、次のファイル create_iframe.js があります。

document.write("<script type=\"text/javascript\"> function resizeCrossDomainIframe(id, other_domain) { var iframe = document.getElementById(id);  window.addEventListener('message', function(event) {if (event.data === \"reload\") top.location.reload(); if (event.origin !== other_domain) return;  if (isNaN(event.data)) return;  var height = parseInt(event.data) + 40; iframe.height = height + \"px\"; }, false); }</script> ");
document.write("<div id=\"wwiz_rooster\"></div>");
document.write("<script type=\"text/javascript\">");
document.write("var loc = window.location.host; ");
document.write("loc = \"http://\"+loc;");
document.write("alert(loc);");
document.write("document.getElementById(\"wwiz_rooster\").innerHTML = '<iframe src=\"MyDomain.com/index.php?accessing_from=\'+loc+\'\" style=\"border: none; margin-top: 15px; margin-bottom: 15px; width:986px; min-height: 60px;\" onload=\"resizeCrossDomainIframe(\\'rooster_iframe\\', \\'http://MyDomain.com\\');\"> </iframe>'  ");
document.write("</script>");

編集:愚かな私....実際のIDをIFRAMEに割り当てるのを忘れた!!!! ANWAY - すべてうまくいきます! そして助けてくれてありがとう!!!!!!

4

1 に答える 1

1

引用符が適切にエスケープされていないネストされた文字列リテラルが多すぎます。それが成長するのを見てください:

resizeCrossDomainIframe('iframe', 'http://MyDomain.com');
<iframe src="http://MyDomain.com/index.php?…"
  style="border: none; min-height: 60px;"
  onload="resizeCrossDomainIframe('iframe', 'http://MyDomain.com');"
></iframe>
document.getElementById("my_iframe").innerHTML =
'<iframe src="http://MyDomain.com/index.php?accessing_from='+loc+'" \
  style="border: none; min-height: 60px;" \
  onload="resizeCrossDomainIframe(\'iframe\', \'http://MyDomain.com\');" \
></iframe>'
"document.getElementById(\"my_iframe\").innerHTML = \
  '<iframe src=\"http://MyDomain.com/index.php?accessing_from=\'+loc+\'\" \
    style=\"border: none; min-height: 60px;\" \
    onload=\"resizeCrossDomainIframe(\\'iframe\\', \\'http://MyDomain.com\\');\" \
  ></iframe>' \
"

最後の反復でバックスラッシュを 2 倍にするのを忘れました。アポストロフィと二重引用符を組み合わせることができたのは幸運なことでした。

"document.getElementById(\"my_iframe\").innerHTML = \
  \"<iframe src=\\\"http://MyDomain.com/index.php?accessing_from=\"+loc+\"\\\" \
    style=\\\"border: none; min-height: 60px;\\\" \
    onload=\\\"resizeCrossDomainIframe(&quot;iframe&quot;, &quot;http://MyDomain.com&quot;); \\\" \
  ></iframe>\" "

ところで、3 回目の反復は私には間違っているように見えます。ドキュメントにプレーンな JS を記述したいのはなぜですか? 出力したい場合は<pre>タグの中に入れたほうがいいですが、JavaScript からは書かないでください。そして、それを実行したい場合 (document.write("<script>")前に a を付けない限り実行しません)、実行するだけです。コードを文字列として扱わないでください。


現在のサイトに iframe を作成するスクリプトを公開するという目標に関しては、そのスクリプトには次の内容が含まれている必要があります。

var loc = …;
document.write('<iframe src="http://MyDomain.com/index.php?accessing_from='+loc+'" \
  style="border: none; min-height: 60px;" \
  onload="resizeCrossDomainIframe(\'iframe\', \'http://MyDomain.com\');" \
></iframe>');

それをテストページに含めてみてください。

于 2013-02-08T13:40:03.390 に答える