2010-03-24 41 views
6

Tôi hoàn toàn mới với GreaseMonkey, nhưng tôi đang cố gắng tạo một kịch bản nhỏ.

// ==UserScript== 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js 
// ==/UserScript== 
(function() { 
    $ = unsafeWindow.jQuery; 
    alert($); // this gives 'undefined' 
}()); 

Tại sao cảnh báo cung cấp undefined và cách khắc phục điều này?

CẬP NHẬT

Tôi cố gắng này:

(function(){ 
    //boilerplate greasemonkey to wait until jQuery is defined... 
    function GM_wait() 
    { 
    alert('ok'); 
    if(typeof unsafeWindow.jQuery == 'undefined') 
     window.setTimeout(GM_wait,100); 
    else 
     unsafeWindow.jQuery(function() { letsJQuery(unsafeWindow.jQuery); }); 
    } 
    GM_wait(); 

    function letsJQuery($) 
    { 
    alert($); 
    } 
})(); 

nhưng điều này đã cho tôi một vòng lặp vô hạn của ok-cảnh báo. Dường như jQuery không tải được gì cả.

+0

thử những câu hỏi liên quan: http://stackoverflow.com/questions/2077714/greasemonkey-require-jquery-not-working-component-not-available http://stackoverflow.com/questions/859024/how-can-i-use-jquery-in -greasemonkey – Kip

Trả lời

4

Chỉnh sửa: Có thể là this không?

Có lẽ bạn không có phiên bản Greasemonkey đủ gần đây. Đó là phiên bản 0.8 được thêm vào @require. Ngoài ra, hãy nhớ rằng @require chỉ được xử lý khi tập lệnh được cài đặt lần đầu tiên. Nếu bạn thay đổi danh sách các tập lệnh bắt buộc, bạn cần gỡ cài đặt nó và cài đặt lại nó; Greasemonkey tải xuống tập lệnh được yêu cầu khi cài đặt và sử dụng bản sao được lưu trong bộ nhớ cache sau đó.


Kịch bản GM có thể thực hiện trước khi trang đã sẵn sàng (ví dụ: trước khi jQuery đã khởi tạo). Tôi sử dụng mã này trong các tập lệnh Greasemonkey của mình để sử dụng jQuery:

(function(){ 
    //boilerplate greasemonkey to wait until jQuery is defined... 
    function GM_wait() 
    { 
    if(typeof unsafeWindow.jQuery == 'undefined') 
     window.setTimeout(GM_wait,100); 
    else 
     unsafeWindow.jQuery(function() { letsJQuery(unsafeWindow.jQuery); }); 
    } 
    GM_wait(); 

    function letsJQuery($) 
    { 
    //whatever 
    } 
})(); 
+0

Tôi cũng tìm thấy điều này, nhưng đây là trước khi greasemonkey có thể sử dụng @require, nếu tôi không hiểu nó một cách chính xác. Tôi sẽ thử. – Natrium

+0

@Natrium: Tôi không nhận thấy '@ require'. Tôi đã không sử dụng nó trước đây, nhưng nó sẽ chỉ là 'jQuery', không phải là 'unsafewindow.jQuery'? Nếu bạn đang sử dụng '@ require' tôi nghĩ rằng định nghĩa nó trong kịch bản (không phải trên' unsafeWindow') – Kip

+0

trông giống như @require không hoạt động tốt. Bây giờ tôi đã sử dụng phương pháp cũ tốt: http://joanpiedra.com/jquery/greasemonkey/ Và điều này hoạt động như một sự quyến rũ. Cảm ơn bạn! – Natrium

1

@require là để thực hiện tải xuống tài nguyên một lần.
Khi cài đặt lần đầu, tài nguyên được tải xuống và được đặt trong thư mục của tập lệnh. Tập lệnh được yêu cầu sau đó thực hiện trước bản ghi người dùng.
Nó chạy dưới cùng phạm vi với tập lệnh người dùng chứ không phải dưới unsafeWindow.
Nếu bạn đang tự viết kịch bản, nó sẽ không nhận được tài nguyên cho đến khi bạn cài đặt nó (hoặc chỉnh sửa tệp GM xml để nhận ra tài nguyên và tạo tệp trong dir của kịch bản, trong thư mục hồ sơ người dùng của firefox).

Nếu bạn chọn (đơn giản) gỡ bỏ cài đặt \ cài đặt lại phương pháp, đừng quên sao lưu UserScript của bạn ... :)

0

mới cần greasemonkey thêm // @grant none sử dụng // @require

Các vấn đề liên quan