Hatena::Groupjavascript

JavaScriptで遊ぶよ

 | 

2011-01-12

Firefox 4 では window.URL という読み取り専用の変数があるので気をつけましょう

19:55

Firefox 4 beta では alert(URL) すると [object MozURLProperty] となるらしい。

これは location なんかと同じで読み取り専用変数なので、うっかりグローバル領域で URL って変数を使ってたコードは動かなくなる可能性が高い。


Mozilla さん…


コメント欄にあるように、ページからは読み取り専用じゃないかもしれない(?)。Greasemonkey のサンドボックス内では読み取り専用っぽい。これなら問題はだいぶ小さくなるか。

os0xos0x2011/01/12 20:34読み取り専用なのはdocument.URLのほうではないでしょうか?document.URLは、DOM Level 2 HTMLで定義されていて、
document.URL === location.href // true となります。
window.URL のほうはFileAPI絡みで用意されたグローバル変数(名前空間)ですね。FileAPIのメソッドはグローバルに置くべきかどうか、ぶつかりやすい(saveAsとか)という議論があって、名前空間を用意したと思うのですが、URLのほうがむしろぶつかりやすそうなので、よくわからないですね…。

edvakfedvakf2011/01/12 20:58Firefox 4 インストールしてないので試したわけではありませんが、

http://twitter.com/#!/piro_or/statuses/25085406617800704
read only らしいですよ。
URL=1;alert(URL); はどうなりますでしょうか。

http://my.opera.com/japanese/forums/topic.dml?id=875012&t=1294833468&page=1#comment8336172
の人は試したみたいです。(元ネタです)

os0xos0x2011/01/13 02:08うーん、確かにreadonlyって書いてありますね…。ただ、Firefox4b10pre(Minefield)で試したところ、
javascript:try{window.URL=1;}catch(e){alert(e)};alert(URL); // 1
でした。ちなみに、Kurojitosanさんの代入が消えてしまうというのはGreasemonkeyのサンドボックス絡みと思われます。

トラックバック - http://javascript.g.hatena.ne.jp/edvakf/20110112
 |