初涉 GreaseMonkey, 兼探其與 Opera UsersJS 的不同

來源:互聯網
上載者:User

GreaseMonkey裝在FF上有段時間了,一直處于禁用狀態
前幾天和香草山討論瀏覽器外掛程式,提到了這隻猴子,抽空測試了一下

對GM有了個大體的印象:

 

這個東東本質上就是塊JS
它通過瀏覽器這個層面,在解析完頁面之後,往頁面裡丟進去一塊js讓其運行
這塊js啟動並執行時候,可以對頁面中的DOM進行增刪改查的操作,由此實現使用者想要的一些效果。

可能是出於安全性的考慮,GM的js似乎有自己單獨的空間(sand-box?)
不能直接修改原頁面的JS變數和函數,除非使用unsafeWindow來改變原頁面的變數和函數

 

因為這個原因,我無法修複原網頁載入過程中出現的錯誤以及導致的一些未定義變數
而且那些載入過程中的動作我也無法控制。

 

關於unsafeWindow,參考:
http://suddymail.org/show-165-1.html
http://lifegoo.pluskid.org/?p=113

 

這個難題目前我還沒找到解決的方法,不過Opera給了我一點希望。。。

 

opera的USERJS

 

operachina是這樣描述USERJS的執行原理的:

 

瀏覽器在載入頁面時,網頁、指令碼、樣式,及圖片等相繼被載入。但是,當頁面中的首個指令碼被執行前,使用者指令碼就已經被執行了。由於它是最早執行被執行的指令碼,所以它獲得的控制權就比較早,它可以:

* 決定所瀏覽頁面中,哪些外部 JavaScript 檔案可以被載入;
* 改寫所載入網頁中的任何指令碼(<script>)塊代碼;
* 攔截頁面上正在被檢測的事件,以此改變事件的處理方式;
* 替換網頁指令碼中定義的變數和函數;

除此之外,使用者指令碼做為所瀏覽網頁的一部分,當然也能完成網頁自身指令碼所能完成的功能。包括,檢測事件、建立變數、建立函數,並且讀取所應用到頁面的 Cookie 等。使用者指令碼能擁有如此高的控制權,完全依賴於它是從 Opera 核心進行支援的,並且通過這種特性所獲得的能力,同樣被擴充到了 Opera Mini 及 Opera Mobile 平台上。

 

根據它這裡的描述,使用者指令碼是在頁面載入前被執行的,所以能夠在載入前做些事情

 

但是進而一想,這也不對啊,使用者指令碼先執行,事兒倒是幹了,但是剛才初始化的變數、函數,待會兒不還是給頁面裡的同名變數、函數給覆蓋掉了。

 

Opera的設計者當然想到了這點,所以提供了很多相關的介面,比如下面這兩個:

window.opera.defineMagicVariable(targetVariableName, fun1,fun2)

window.opera.defineMagicFunction(targetFunctionName,fun1)

 

這兩個“魔術介面”的詳情我不轉貼過來了,我還沒研究清楚的東西就先不貼。

有興趣的可以點擊這裡前往觀看。

 

 

我想,我的難題也許可以通過這幾個介面,在Opera上得到解決?

 

抽空繼續研究中。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.