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 は更新されていますが、ブラウザは、オブジェクトへのいくつかのパラメータが変更されたという事実を見逃しています。何かご意見は?