2012-03-20 59 views
1

我在頁面上有一個簡單的$(document).ready(function(){});無法訪問jQuery庫。jQuerify Grease Monkey腳本不適用於頁面上的jQuery依賴腳本?

我通常只是把庫放在頁面上,但它是CMS內後端「編輯」頁面的一部分。我真的只需要在其餘腳本啓動之前加載jQuery庫,以便我們可以進行一些小的更改,直到星期天我們能夠以正確的方式實際解決此問題(刪除這些腳本現在不是一個選項我唯一的選擇是找到一種方法來讓潤滑脂猴子jQuerify工作)。有任何想法嗎?

澄清

我需要「jQuerify」我瀏覽的網頁,但是在做它加載DOM後..我需要它來加載,好像它是在的頭頁面,以便任何相關腳本都能正常運行。這可能嗎?

我希望這是有道理的。謝謝。

回答

2

這可以通過@run-at document-start元規則完成。然後在構建文檔根之前執行該腳本。

下面的腳本會一直運行一段時間,直到存在document.documentElement<html>)或document.head<head>)。然後,它注入jQuery。

我已經證實,該代碼使用此小提琴工作:http://jsfiddle.net/VuJjT/show/(當Userscript不活躍,這表明undefined 2倍,否則,它顯示了function 2倍)。

// ==UserScript== 
// @name   jQuery before everything 
// @namespace  Rob W 
// @description Inject jQuery as soon as possible, before start 
// @include  * 
// @run-at   document-start 
// ==/UserScript== 


var s = document.createElement('script'); 
s.onload = function() { 
    // Clean-up 
    this.parentNode.removeChild(this); 
}; 
s.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"; 
var poller = setInterval(function() { 
    var insertInto = document.head || document.documentElement; 
    if (insertInto) {    // `<html>` or `<head>` exists 
     clearInterval(poller);  // Clear poller 
     insertInto.appendChild(s); // Inject script. 
    }; 
}, 4); // Every 4 milliseconds. This interval may run a few times. 
+0

請注意,這並非萬無一失。早期的腳本節點可能會在此之前觸發。測試表明,即使[「零延遲」,計時器解決方法](http://ajaxian.com/archives/settimeout-delay)對於Firefox來說也不夠快。 – 2012-03-22 01:27:34

+0

@BrockAdams'@ run-at document-start'使代碼在構建文檔之前執行。我多次測試了代碼+演示,沒有任何錯過(FF 11)。 – 2012-03-22 08:35:06

+0

是的。但是,當文件被GM檢測到時和第一個doc腳本觸發時間之間的差距可能意味着GM注入對於第一個腳本或第二個腳本來說太晚了,這取決於文檔。我見過這個「野外」,這就是我提到它的原因。如果我覺得自己很活潑,我會安裝一個演示頁面(沒有承諾)。 – 2012-03-22 09:27:52

相關問題