Làm cách nào để sử dụng jQuery trong Greasemonkey?


234

Tôi đã thử đặt dòng này nhưng nó không hoạt động:

// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js

jQuery hoàn toàn không hoạt động trong Greasemonkey. Có cách nào khác để sử dụng jQuery trong Greasemonkey không?

-

Đối với tất cả những người có cùng một vấn đề, bạn phải tải tệp lên greasespot sau đó cài đặt nó từ đó.

Tùy chọn Tạo tập lệnh mới sẽ không hoạt động!


14
@Jorge, bạn không biết rằng trang web đó hoàn toàn không có phép thuật trong đó sao? Bạn có thể duyệt bất cứ thứ gì có phần mở rộng tệp .user.js và Greasemonkey sẽ hỏi bạn có muốn cài đặt nó không. Điều đó bao gồm các tập tin trên máy tính cục bộ của bạn. Cài đặt bất kỳ tập lệnh nào cũng đơn giản như kéo nó vào trình duyệt của bạn.
Rob Kennedy

5
Có vẻ như bây giờ nó hoạt động tốt ngay cả khi chỉnh sửa tập tin sau khi cài đặt.
Josef Sábl

6
Josef đã đúng - kể từ phiên bản 0.9.0 , Greasemonkey sẽ cài đặt các tệp @required ngay khi tệp được chỉnh sửa.
Rory O'Kane

1
Cũng đừng quên vẫn sử dụng $(document).ready(function() {...});mã của bạn
Người dùng

1
Cách dễ nhất để làm mới bạn @requireslà thêm một hàm băm hoặc chuỗi truy vấn vào cuối @requirecâu lệnh và thay đổi nó bất cứ khi nào nó cần cập nhật. Tương tự như cách bạn "lưu trữ" một favicon. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js?v=changeme
Apache

Câu trả lời:


189

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.

// @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js 

Nếu bạn không có 0,8, thì hãy sử dụng kỹ thuật Joan Piedra mô tả để thêm một scriptyếu tố vào trang theo cách thủ công .

Giữa phiên bản 0.8 và 0.9, @requiređược chỉ xử lý khi kịch bản được cài đặt đầu tiên. Nếu bạn thay đổi danh sách các tập lệnh cần thiết, bạn cần gỡ cài đặt tập lệnh của mình và cài đặt lại tập lệnh; Greasemonkey tải xuống tập lệnh cần thiết một lần khi cài đặt và sử dụng bản sao được lưu trong bộ nhớ cache sau đó.

Kể từ 0.9, hành vi của Greasemonkey đã thay đổi (để giải quyết vấn đề liên quan đến tiếp tuyến ) để giờ đây nó tải các tập lệnh cần thiết sau mỗi lần chỉnh sửa; cài đặt lại tập lệnh không còn cần thiết.


Rob, vậy tôi cần phải làm gì? Tôi đang tạo tập lệnh người dùng của mình bằng liên kết Tập lệnh người dùng mới. Tôi thêm @require và nó không hoạt động. Vì vậy, làm thế nào tôi có thể làm cho nó hoạt động? Vui lòng giải thích Tôi muốn phương thức @require hoạt động vì nó thanh lịch hơn nhiều so với phương thức phần tử tập lệnh
Keira Nighly

1
Ok tôi đã làm cho nó hoạt động. Cảm ơn!!! Tôi đã tải lên tập lệnh trong Greasespot và cài đặt nó từ đó.
Keira đêm

2
Tôi tưởng tượng rằng khi bạn tạo một tập lệnh mới từ bên trong Greasemonkey, tập lệnh được cài đặt ngay lập tức. Tập lệnh đó là tệp trống mặc định, có nghĩa là bạn đã bỏ lỡ cơ hội để yêu cầu bất kỳ tập lệnh bên ngoài nào.
Rob Kennedy

Vì vậy, không có cách nào để sử dụng @require trên một tập lệnh mới mà bạn đang thực hiện? : /
quano

4
Nó khá đơn giản, @Quano. Tạo một tệp .user.js mới, viết tập lệnh của bạn vào đó và sau đó kéo nó vào trình duyệt của bạn để cài đặt nó. Giới hạn về yêu cầu tập lệnh bên ngoài chỉ xuất hiện nếu bạn tạo tập lệnh từ bên trong Giao diện người dùng của Greasemonkey, nhưng không có yêu cầu nào bạn phải sử dụng Greasemonkey để tạo tệp tập lệnh. Bạn có thể chỉnh sửa tập lệnh sau khi được cài đặt, nhưng nếu bạn muốn thêm các lệnh mới @require, bạn sẽ cần gỡ cài đặt và cài đặt lại tập lệnh để nó có hiệu lực.
Rob Kennedy

81

Nếu bạn muốn sử dụng jQuery trên một trang web đã được bao gồm, đây là cách để đi (lấy cảm hứng từ BrunoLM):

var $ = unsafeWindow.jQuery;

Tôi biết đây không phải là mục đích ban đầu của câu hỏi, nhưng nó ngày càng trở thành một trường hợp phổ biến và bạn đã không loại trừ rõ ràng trường hợp này. ;)


4
Rõ ràng không được hỗ trợ trong Chrome - chromium.org/developers/design-document/user-scripts
Ashley

Hoạt động trong Scriptish của Firefox!
Gqqnbig

2
Sẽ muốn kiểm tra rằng bạn chưa có như vậy: if(typeof $ == 'undefined'){ var $ = unsafeWindow.jQuery; } Trong Chrome, một trang web Jquery sẽ có sẵn.
Jonathon

Hừm. Tôi nhận được lỗi thực sự kỳ lạ khi sử dụng này. Đây alert($('.submit_entry').length);là cả lỗi và gửi cảnh báo thích hợp cùng một lúc.
Jonathon

21

Hoàn toàn không có gì sai khi bao gồm toàn bộ jQuery trong tập lệnh Greasemonkey của bạn. Chỉ cần lấy nguồn và đặt nó ở đầu tập lệnh người dùng của bạn. Không cần tạo thẻ tập lệnh, vì bạn đã thực thi JavaScript!

Người dùng chỉ tải xuống tập lệnh một lần, vì vậy kích thước của tập lệnh không phải là mối quan tâm lớn. Ngoài ra, nếu bạn muốn tập lệnh Greasemonkey của mình hoạt động trong môi trường không phải là GM (chẳng hạn như tập lệnh người dùng GM-esque của Opera hoặc Greaskit trên Safari), thì sẽ không sử dụng các cấu trúc độc đáo của GM như @require.


7

Giải pháp của Rob là giải pháp phù hợp - sử dụng @requirevới thư viện jQuery và chắc chắn cài đặt lại tập lệnh của bạn để lệnh được xử lý.

Một điều tôi nghĩ là đáng để thêm vào là bạn có thể sử dụng jQuery bình thường một khi bạn đã đưa nó vào tập lệnh của mình, ngoại trừ các phương thức AJAX . Theo mặc định, jQuery tìm kiếm XMLHttpRequest, không tồn tại trong ngữ cảnh Greasemonkey. Tôi đã viết về một cách giải quyết trong đó bạn tạo một trình bao bọc cho GM_xmlhttpRequest (phiên bản Greasemonkey của XHR) và sử dụng jQuery ajaxSetup()để chỉ định phiên bản được bọc của bạn làm mặc định. Một khi bạn làm điều này, bạn có thể sử dụng $.get$.postnhư bình thường.

Bạn cũng có thể gặp vấn đề với jQuery $.getJSONvì nó tải JSONP bằng <script>các thẻ. Điều này dẫn đến lỗi vì jQuery định nghĩa hàm gọi lại trong phạm vi của cửa sổ Greasemonkey và các tập lệnh được tải sẽ tìm kiếm cuộc gọi lại trong phạm vi của cửa sổ chính. Đặt cược tốt nhất của bạn là sử dụng $.getthay thế và phân tích kết quả với JSON.parse().


4

Bạn có thể tạo tập lệnh mới bằng Tập lệnh người dùng mới trong Greasemonkey nhưng bạn phải chỉnh sửa tệp config.xml bên trong thư mục gm_scripts.

Tệp config.xml của bạn phải có một cú pháp tương tự như sau:

<Script filename="jquery_test.user.js" name="jQuery Test" namespace="http://www.example.com/jQueryPlay/" description="Just a test" enabled="true" basedir="jquery_test">
        <Include>http://*</Include>
        <Require filename="jquery.js"/>
</Script>

Chú ý <Require>thẻ.

Trong kịch bản của bạn, bạn có thể sử dụng cú pháp jQuery trực tiếp. Đảm bảo bạn có thẻ yêu cầu trong tiêu đề Greasemonkey. Đây là một ví dụ Hello World:

// ==UserScript==
// @name           Test jQuery
// @namespace      http://www.example.com/jQueryPlay/
// @description    Just a test
// @include        http://*
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
// ==/UserScript==

$(document).ready(function() {  
        alert("Hello world!");
});

Hãy nhớ rằng sau khi sửa đổi tệp config.xml, bạn phải khởi động lại trình duyệt của mình cho Greasemonkey để tải lại cài đặt.

Cũng lưu ý rằng bạn cần sao chép tệp jquery.js vào thư mục thư mục tập lệnh để làm việc này. Tôi đã thử nghiệm điều này và nó chỉ hoạt động nếu bạn thực sự sao chép tệp theo cách thủ công ở đó.

Chúc mừng jQuery!


4

Cập nhật : Như bình luận bên dưới nói, câu trả lời này đã lỗi thời.

Như mọi người khác đã nói, @require chỉ được chạy khi tập lệnh đã được cài đặt. Tuy nhiên, bạn cũng cần lưu ý rằng hiện tại jQuery 1.4. * Không hoạt động với greasemonkey. Bạn có thể xem tại đây để biết chi tiết: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Bạn sẽ phải sử dụng jQuery 1.3.2 cho đến khi mọi thứ thay đổi.


3
Câu trả lời này đã lỗi thời kể từ phiên bản GM 0.9 trở lên.
Brock Adams

3
@Brock: Tại sao? Bạn có thể giải thích cho chúng tôi noobs?
Trevor Sullivan



1

Bạn có thể nhận được Component unavailablenếu bạn nhập tập lệnh jQuery trực tiếp.

Có lẽ đó là những gì @Conley đang nói về ...

Bạn có thể dùng

@require        http://userscripts.org/scripts/source/85365.user.js

là phiên bản sửa đổi để hoạt động trên Greasemonkey và sau đó lấy đối tượng jQuery

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");

Tôi nhận ra đây là 5 yo, nhưng chỉ tự hỏi: không sai khi lấy đối tượng jQuery như nó đã được xác định trên trang, coi nó là unsafeWindow.jQuery?
jj_ 17/05/2015

0

@requireKHÔNG chỉ xử lý khi kịch bản được cài đặt đầu tiên! Theo quan sát của tôi, nó được xử lý trong lần thực hiện đầu tiên! Vì vậy, bạn có thể cài đặt tập lệnh thông qua lệnh của Greasemonkey để tạo tập lệnh hoàn toàn mới. Điều duy nhất bạn phải quan tâm là, không có trang nào được tải lại kích hoạt, cho dù bạn thêm @requirephần này. (và lưu tập lệnh mới ...)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.