2012-06-25 40 views
26

Tôi hoàn toàn mới đối với Greasemonkey, javascript, trên thực tế là tất cả các giao diện người dùng.Chạy tập lệnh Greasemonkey trên cùng một trang, nhiều lần?

Yêu cầu: UserScript được chạy bởi GS một lần sau khi tải trang. Tuy nhiên, tôi cần cùng một tập lệnh để chạy nhiều lần mà không cần làm mới

Trường hợp sử dụng: Đối với ví dụ, tìm kiếm Amazon.com xảy ra khi sử dụng Ajax. Tôi cần nhúng phần tử tùy chỉnh vào kết quả tìm kiếm.

tôi cần phải tiêm nội dung của tôi với kết quả tìm kiếm-div cùng với kết quả mỗi lần tìm kiếm sẽ xảy ra trong cùng một trang (không có làm mới trang)

kịch bản hiện tại của tôi chỉ chạy với làm mới trang.

Tôi hy vọng giải thích ở trên là rõ ràng. Hãy giúp tôi.

Trả lời

37

Cách đơn giản nhất, mạnh mẽ nhất là sử dụng the waitForKeyElements() utility.

Đây là một hoàn chỉnh kịch bản sử dụng jQuery và waitForKeyElements để thay đổi kết quả tìm kiếm của Amazon:

// ==UserScript== 
// @name  _Amazon Search, alter results 
// @include http://www.amazon.com/s/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js 
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 

function addCustomSearchResult (jNode) { 
    //***** YOUR CODE HERE ***** 
    jNode.prepend (
     '<div id="result_000" class="fstRow">Buy my stuff, instead!</div>' 
    ); 
} 

waitForKeyElements ("#atfResults", addCustomSearchResult); 
+2

Cảm ơn A LOT !!!!! Mặc dù tôi có một số kinh nghiệm lập trình, kịch bản giao diện người dùng này là loại gây phiền hà (gây phiền nhiễu) cho tôi. Mã của bạn thực hiện chính xác theo cách tôi muốn. Tôi sẽ tùy chỉnh nó để đáp ứng các yêu cầu khác. Cảm ơn rất nhiều lần nữa. – Firefox

+0

Bạn được chào đón; rất vui được giúp đỡ! –

4

Bạn có thể sử dụng các sự kiện DOMNodeInserted gọi callback của bạn, ví dụ:

document.addEventListener('DOMNodeInserted', function() { alert('hi') }, false); 

Lưu ý rằng sự kiện này sẽ được kích hoạt bởi bất kỳ sự thay đổi trong cấu trúc trang, vì vậy bạn sẽ cần phải kiểm tra xem bạn nhắm mục tiêu thay đổi phù hợp.

+0

Cảm ơn rất nhiều, tôi sẽ kiểm tra xem nó ra. Có thể theo dõi sự kiện 'nhấp' liên quan đến nút tìm kiếm không? – Firefox

+1

Sự kiện đột biến không được dùng nữa, lỗi và không đơn giản để sử dụng trong thực tế. ... Bạn có thể theo dõi sự kiện nhấp chuột, nhưng thay đổi trang thực tế sẽ xảy ra một khoảng thời gian ngẫu nhiên (tối đa nhiều giây) sau đó. –

+0

Không biết nó đã không được chấp nhận, cảm ơn. – ncreep

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