1

私はSilverlightアプリケーションを使用しています。このアプリケーションは、ブラウザーに読み込まれると、html<param>タグ(silverlightタグ内にあります<object>)に値を設定します。後でSLアプリケーションの実行中に、のvalue属性を変更する必要があります <param>鬼ごっこ。IDでparamタグを取得するクライアント側のjavascript関数を呼び出してから、objById.setAttribute(value、 "my new value")を呼び出すだけで、これを実現しようとしています。ここが奇妙になります。属性を新しい値に設定した後に属性の値を表示するアラートメッセージによると、この方法で属性を設定することは機能しているようです。ただし、アラートダイアログを閉じた後にブラウザでソースを表示すると、Webページのソースに古い値が表示されたままになります。ソースビューに新しい値が表示されない理由はありますか?paramタグには、runat="server"ロード時にSilverlightアプリケーションによって最初に設定されるため、属性があります。runat = server属性はここで問題を引き起こしますか?

HTML:

<div id="silverlightControlHost">
  <object id="silverlightObject" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
    <param .../>
    <param .../>
    <param .../>
    <param name="initParams" id="Ip" runat="server" />
    ...

Javascript:

function refreshInitParams(newParams) {
  var slObjIp = document.getElementById("Ip");

  //Display Initial Value
  alert(slObjIp.getAttribute("value").toString());
  //Set New Value
  slObjIp.setAttribute("value", "New Value");
  //Display new value
  alert(slObjIp.getAttribute("value").toString());
}
4

2 に答える 2

2

HTML が解析されると、ブラウザーは未加工のテキストからドキュメント オブジェクト モデル(DOM) を構築します。これは、コンピューター プログラムのコンパイルに似ています。ブラウザーが必要な情報をすばやく見つけて、ブラウザー エクスペリエンス全体をスムーズにできるように情報を整理するためです。たとえば、 を呼び出しdocument.getElementById()た場合、ブラウザはその HTML をすべて再度解析するわけではなく、問題の要素の ID のインデックス (おそらくハッシュ テーブル) を調べるだけです。

このため、DOM 要素を更新setAttributeすると、この場合は を使用して、ブラウザは DOM のみを更新します。DOM の構築元である HTML を再生成する理由はありません。これは無意味であり、不要な費用が発生します。このため、ブラウザのソースを見ても DOM の変更が反映されていません。元はサーバーから送信されたソースのみが表示されます。

お役に立てれば!

于 2012-12-14T17:38:13.137 に答える
1

IEで「ソースの表示」を使用していると思います。
ページのソースは、ロード後に変更されません。javascript を介してページ上のテキストを変更しても、ソースの表示中には表示されません。

ソースの変更をその場で確認したい場合は、Chrome などの別のブラウザーで Inspect Element を使用してください。スクリプトを介して行われた変更が表示されます。

于 2012-12-14T17:32:48.333 に答える