0

SWFObject を使用して Flash SWF ファイルを再生しています。SWF ファイルは、いくつかのフラッシュ変数をサポートしています。一重引用符と二重引用符が混在する Flash 変数の 1 つに複雑な値を渡そうとすると、SWFObject が完全にレンダリングされたコンテンツを Flash オブジェクト用に確保された DIV に書き込むときに問題が発生します。

以下のコードは、 SWFObject がレンダリングされたコンテンツを書き込むflashcontentという名前の DIV と、SWFObject とやり取りする Javascript コードを示しています。

   <!-- Div that will receive the Flash object.  This DIV is written to by SWFObject.js.  Therfore It's name must match the name
            in the so.write() statement below. -->
    <div id="flashcontent">
    </div>

    <!-- Div that will receive the Flash object.  This DIV is written to by SWFObject.js.  Therfore It's name must match the name
            in the so.write() statement below. -->
    <div id="flashcontent">
    </div>

    <!-- Create the tag cloud -->
    <script type="text/javascript">
        var so = new SWFObject("/Content/flash/tagcloud.swf", "tagcloud", "600", "400", "7", "#336699");

        so.addParam("wmode", "transparent");
        so.addVariable("mode", "tags");
        so.addVariable("distr", "true");
        so.addVariable("tcolor", "0xff0000");
        so.addVariable("hicolor", "0x000000");

        so.addVariable("tagcloud", "<tags><a href='javascript:showMessage(\"tag1\");' style='9'>tag one</a><a href='javascript:showMessage(\"tag2\");' style='12'>Tag two</a></tags>");
        so.write("flashcontent");
    </script>

ご覧のとおり、Javascript の showMessage() 関数に渡される文字列パラメーターを囲む二重引用符をエスケープしようとしています。ただし、flashcontent DIV コンテンツがレンダリングされると、次のようになります。

<div id="flashcontent"><embed type="application/x-shockwave-flash" src="/Content/flash/tagcloud.swf" width="600" height="400" id="tagcloud" name="tagcloud" bgcolor="#336699" quality="high" wmode="transparent" flashvars="mode=tags&amp;distr=true&amp;tcolor=0xff0000&amp;hicolor=0x000000&amp;tagcloud=<tags><a href='javascript:showMessage(" tag1");'="" style="9">tag one<a href='javascript:showMessage("tag2");' style="12">Tag two</a>"/></div>

最初のエスケープされた二重引用符は、エスケープされていない二重引用符として解釈され、フォーマットが壊れて無効なハイパーリンクになります。エスケープされていない引用符を取り除くと、内容は次のようになります。

<div id="flashcontent"><embed type="application/x-shockwave-flash" src="/Content/flash/tagcloud.swf" width="600" height="400" id="tagcloud" name="tagcloud" bgcolor="#336699" quality="high" wmode="transparent" flashvars="mode=tags&amp;distr=true&amp;tcolor=0xff0000&amp;hicolor=0x000000&amp;tagcloud=<tags><a href='javascript:showMessage(tag1);' style='9'>tag one</a><a href='javascript:showMessage(tag2);' style='12'>Tag two</a></tags>"></div>

これで、フォーマットが適切になり、Web ページが健全になりました。当然のことながら、ShowMessage() 関数がメッセージを表示すると、tag1とtag2が有効な Javascript 変数名ではないため、「未定義」と表示されます。

SWFObject のaddvariableメソッドは、エスケープされた二重引用符に対して通常とは異なることを行いますか? Javascript メソッドのパラメーターを二重引用符で囲むことができるように、 addvariableが受け入れる文字列を作成するにはどうすればよいですか?

4

1 に答える 1

1

swfobject の非常に古いバージョンを使用しています。最新バージョン (2.2) または 2.3 ベータ版を試してみてください。それぞれ内部で異なるパラメーターを処理します。あなたの場合、2.3が最もうまくいくかもしれません。

于 2013-08-19T15:40:23.660 に答える