0

Flash 用に次の単純なオブジェクトが埋め込まれています。

<object id="siwp_obj"
        type="application/x-shockwave-flash" 
        data="button.swf?file=%2F/ex.php?id=89804c7326e92a00c5c88c181190af8159cf060b"
        height="32" width="32">
    <param id="siwp_param" name="movie"
           value="button.swf?file=%2F/ex.php?id=89804c7326e92a00c5c88c181190af8159cf060b" />
</object>

私がやりたいことは、idパラメーターをブラウザーによって生成された新しい ID に置き換えることです。

これは Firefox では機能しますが、Chrome や IE9 では機能しません。Firefox はパラメータを正常に更新するため、Flash オブジェクトは新しい ID を参照しますが、Chrome と IE9 は ID を更新しないか、スクリプト エラーまたは警告が発生します。

var cid = "randomstring";
var obj = document.getElementById('siwp_obj');
// get the "data" attribute which contains the URL with an old id to replace
obj.setAttribute('data', obj.getAttribute('data').replace(/[a-zA-Z0-9]{40}$/, cid));

obj = document.getElementById('siwp_param');
obj.value = obj.value.replace(/[a-zA-Z0-9]{40}$/, cid);

これはプラグインシステムで使用されるため、javascript ライブラリが利用できないと仮定しようとしています。

object タグと param タグの URL を動的に更新する方法について何か考えがある人はいますか?

編集:

Chrome でデバッグを行ったところ、パラメーターが更新されていることに気付きましたが、フラッシュを操作すると再読み込みされていません。

例えば:

var obj = document.getElementById('siwp_obj');
alert(obj.getAttribute('data')); // the old URL with old ID
obj.setAttribute('data', obj.getAttribute('data').replace(/[a-zA-Z0-9]{40}$/, cid));
alert(obj.getAttribute('data')); // the new URL with new ID

...しかし、Flash オブジェクトをクリックして新しい URL からストリーミングしようとすると、まだ古い ID を持つ古い URL を参照しています。そのため、DOM は更新されていますが、ブラウザは、オブジェクトへのいくつかのパラメータが変更されたという事実を見逃しています。何かご意見は?

4

2 に答える 2

1

ページに読み込まれた後に getElementById() としてアプローチするのではなく、要素全体を動的に作成するのが最善の方法だと思います。

したがって、すべての属性を追加してから、親ノードに追加するdocument.createElement("object");だけでなく、それが機能するはずです(テストしていませんが)。document.createElement("param")appendChild()

于 2012-04-24T21:31:38.333 に答える
0

dom 要素を更新し、クローンを作成してドキュメントに置き換えることで、機能させることができました。

これは IE6+、Firefox、および Chrome で動作します (他の環境ではまだテストされていません)。

// update object and param tag with new id
var obj = document.getElementById('siwp_obj');
obj.setAttribute('data', obj.getAttribute('data').replace(/[a-zA-Z0-9]{40}$/, cid));
var par = document.getElementById('siwp_param'); // this was a comment...
par.value = par.value.replace(/[a-zA-Z0-9]{40}$/, cid);

// replace old flash w/ new one using new id
// clone the original object tag and then insert the clone, remove the original
var newObj = obj.cloneNode(true);
obj.parentNode.insertBefore(newObj, obj);
obj.parentNode.removeChild(obj);
于 2012-04-27T01:48:52.613 に答える