2012-04-27 27 views
6

Trang web này có một bộ sưu tập hình ảnh. Mỗi khi tôi nhấp vào một hình ảnh thu nhỏ nó sẽ mở URL trong một tab mới (không phải vì tôi đặt firefox để mở liên kết trong các tab mới). Tôi chỉ muốn mở URL trong cùng một cửa sổ. Một ví dụ về hình ảnh thu nhỏ trông như thế nào.Làm thế nào để thay thế sự kiện onclick bằng GreaseMonkey?

<span class="thumb" id="789"> 
<a href="/post/image/12345" onclick="return PostMenu.click(12345)"> 
<img class="preview" src="http://abc.com/image.jpg" title="title" alt=""> 
</a> 
</span> 

Tôi tin rằng onclick="return PostMenu.click(12345)" đang thực hiện việc này. Làm cách nào để thay thế hàm PostMenu.click() bằng chức năng trống của riêng tôi trong GreaseMonkey? Có cách nào để tạo một tập lệnh GreaseMonkey chặn tất cả các sự kiện onclick không?

Tùy chọn duy nhất khác của tôi là đi qua tất cả các lớp span và xóa onclick="return PostMenu.click(12345)" khỏi thẻ liên kết. Nhưng vì có thể có hơn một trăm trong số này trên một trang duy nhất, tôi không muốn làm điều đó.

+0

Mã của 'PostMenu.click', có nghĩa là gì hơn' window.open() '? – Bergi

Trả lời

4

Thực ra, việc xóa onclick s không phải là một nhiệm vụ khó khăn.

Với jQuery, các mã sẽ chỉ đơn thuần là:

$("span.thumb a").prop ("onclick", null); 

Hoặc, đối với phiên bản cũ của jQuery:

$("span.thumb a").removeAttr ("onclick"); 

Một kịch bản hoàn chỉnh:

// ==UserScript== 
// @name  _Kill select onClicks 
// @include http://YOUR_SERVER/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js 
// ==/UserScript== 

$("span.thumb a").prop ("onclick", null); 


Ưu điểm của phương pháp này là:
(1) Bạn giữ PostMenu.click() trong trường hợp bạn muốn, hoặc cần thiết, ở nơi khác,
(2) Bạn đang loại bỏ crud khỏi trang, điều này khiến nó khó sử dụng hơn một chút.
(3) Tôi nghi ngờ rằng bạn cũng có thể cần phải gỡ bỏ hoặc sửa đổi liên kết đó - trong trường hợp đó, cách tiếp cận viết lại được nhắm mục tiêu bằng cách sử dụng jQuery là cách để đi.


Nếu bạn thực sự chỉ muốn thay thế PostMenu.click() chức năng với chức năng trống của riêng bạn, mã cho rằng chỉ là:

unsafeWindow.PostMenu.click = function() {}; 

Khi các con đã chặn Greasemonkey tất cả onclick sự kiện ... Đó là không dễ thực hiện một cách đáng tin cậy. Hãy quên đi cách tiếp cận đó trừ khi có một nhu cầu áp đảo đối với một số lý do (mà dường như không có, trong trường hợp này).

+0

Chỉ cần tự hỏi, đối với kịch bản lệnh 'prop', ngay khi tải trang ... nó có được thực thi ngay lập tức không? Và nó thực sự loại bỏ thuộc tính 'onclick'? Tôi đã thử nghiệm nó và nó không mở trong một tab mới nữa, nhưng khi tôi kiểm tra nguồn, thuộc tính 'onclick' vẫn còn đó. Một vấn đề nhỏ là trang web có phân trang tự động để tôi cuộn xuống, nhiều hình thu nhỏ hơn được tạo nên tập lệnh 'prop' không hoạt động trên hình thu nhỏ mới được tạo. Kịch bản thứ hai hoạt động tốt mặc dù. – Jack

+0

Trên thực tế suy nghĩ về nó, tôi đoán lý do nó mở ra trong một tab mới là do phân trang tự động kể từ khi nhấn trở lại làm cho nó phải tải lại từ đầu. Tắt tính năng phân trang tự động, nhấp vào liên kết sẽ mở trong cùng một tab. – Jack

+0

Có, mã 'prop' chỉ kích hoạt một lần và các liên kết được thêm bởi AJAX sau khi tải trang ban đầu không được thực hiện. Bạn có thể tạo một kịch bản để kiểm tra và xóa 'onclicks' khi chúng xuất hiện, nhưng có vẻ như bạn đã có cách giải quyết và/hoặc cách tiếp cận chức năng rỗng. –

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