2012-03-23 9 views
0

リンクをクリックすると、文字列引数を使用してjavascript関数が呼び出されます。ビデオファイルを表示するinnerHTMLを正しく使用する方法

<a>..</a><script>...</scipt> 

:この文字列は次のように、実際にはA-タグ+スクリプトタグです。

とにかく、javascript関数はそのコードを作成してビデオをページに表示することになっていますが、リンクを押すと表示されるのはコードの文字列なので、テキストとして表示されますそれはハイパーリンクです)、ビデオになるために実行していません。

誰でも知っていますか?

その奇妙に、私は(テキストとして表示される)コードをコピーして、通常のように、エディタに貼り付けた場合、そのビデオは示しているので...

<a title="Click to Show Video" href='javascript:void(0);' onclick="switchFunc('{$thisNode/@*[name()=current()/@Name]}');"> 
    <div dir="{@Direction}" class="ms-rtestate-field"> 
     <xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping="yes"/> 
    </div> 
</a> 




<script type="text/javascript"> 
    function switchFunc(source) { 
    document.getElementById('videoContainer').innerHTML = source; 
    } 
</script> 

<div id="videoContainer"> </div> 
+0

どのような構文ですか? –

+0

これは、Microsoftの共有ポイントからいくつかのxlsを持っています、それは文字列を表す変数のようです。 – sneaky

+0

文字列のフォーマット方法をコンソールで確認できますか?私はそれがxslの問題だと思うし、あなたもonclick文字列を描くべきです。 – NicoSantangelo

答えて

1

私はあなたが次のことを試みることができるので、あなたの属性は、エンコードされていることを私は疑うコメントで言ったように:

<a title="Click to Show Video" href='javascript:void(0);' > 
<xsl:attribute name="onclick">switchFunc('<xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping="yes"/>');</xsl:attribute> 
    <div dir="{@Direction}" class="ms-rtestate-field"> 
     <xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping="yes"/> 
    </div> 
</a> 
+0

これを試しただけで、テキストとして表示されます。 – sneaky

+0

これは異常です、ここに属性値を貼り付けることはできますか? – NicoSantangelo

0

なぜいけないあなたが更新innerHTMLプロパティを持ちますあなたが望むタグ、そしてeval経由でjavascriptを実行させるのですか?

HTML

<a title="Click to Show Video" 
    href='javascript:void(0);' 
    onclick="switchFunc('<a>Anchor</a>','Javascript');"> 
(あなたはこれが本当に <a>Anchor</a><script>Javascript</script>で言っていた)私はそれのXSLTの一部について全くわからないが、アイデアは、あなたの二つのセクションを分割することです

JS

<script type="text/javascript"> 
    function switchFunc(htmlValue, javascriptMethodCall) { 
    document.getElementById('videoContainer').innerHTML = htmlValue; 
    eval(javascriptMethodCall); 
    } 
</script> 
+0

私はあなたが意味することを理解していない、ここでコードを入力することはできますか? – sneaky

+0

私が言ったことで更新されました –

+0

switchFuncを呼び出すようにaタグを変更するにはどうすればよいですか? – sneaky

0

属性値は、出力がエスケープ設定に関係なく常にエスケープされます。これは、コンテンツがXMLファイルの正常性を破壊する可能性があります。

とにかく、コアアーキテクチャは複数の点で問題があります。まず、簡単なクライアント側の機能をサーバーに移します。さらに、ページのメインコンテンツ(ビデオURL)をスクリプトコードにカプセル化して、インデクサーから隠すこともできます。

私はXSLTの大きな楽しみですが、コードの変わった見た目と読みにくいことは、何かがOKではないことを示しています。

主な情報をデータ属性として保持しているアイテムを持つリストをレンダリングし、javascriptコード(独自またはクライアント側のテンプレートエンジン)で出力を作成させるというアプローチが考えられます。

関連する問題