Friday, June 5, 2009

Please, userscript friendly.

以後寫網站的人,要注意隨時有人會拿 userscript 插你啊...

前一篇提到 Maps api 要出新版,所以就開始進行 Flickr Gmap Show 改版 (其實是改寫了),順便改變以前程式的一些問題。之前在寫 Greasemonkey userscript 時,把程式都放在 externsion 的空間中,好處不少,像是不會被外界網站的改寫所影響,而且又有使用 cross-domain xhr 的特權,但壞處很明顯,就是安全性的問題,其實像 Flickr Gmap Show 這種功能,絕大部分的功能都不需要使用特權,反而因為被隔離在 extension 空間中而有很多麻煩之處,像是使用 unsafeWindow,不能直接存取 property 等等,所以就改變做法,把 javascript "插" 到外部網頁空間中,然後就像在一般網頁的 javascirpt 一樣的方便,但也有一樣的限制,有一樣的問題。

把 Google Maps api 插進 flickr 中時, 一切都很順利,地圖也順利出現,但把 jQuery 插進 flickr 時,卻發現出現一些奇奇怪怪的問題,像是找東西找不到之類的問題,本來以為是 jQuery 的 bug,但又發現插到其他網頁卻又沒問題,然後又 trace jQuery 的程式 (要看懂別人的 javascript 真是痛苦),發現問題居然出在一個 string 的操作有不同的行為。只好把 flickr 網頁中的程式給抓出來看 (全都是被混亂過的...><),後來發現下面的程式:
String.prototype.replace_regx = String.prototype.replace;
String.prototype.replace = function(B, A) {
    return this.split(B).join(A)
};

有沒有這麼扯,把東西加到標準函式庫中的就夠大逆不道了,居然還修改行為? 我想寫網頁的人可能想說 My page, My way. 沒人會和他在同一個房間裡,但以現在的網頁環境中,有太多可能有人要和你在同一個房間中工作了,不要把環境弄得奇奇怪怪的。還好還有留下原本的 replace,所以就在我的程式中改回來就行了。

1 comments:

Drake said...

就這樣改掉,真的是很扯,更誇張的是,居然有人 trace 出這個問題來了 XD

Post a Comment