2009-12-19 43 views
5

Tôi đang viết một số bookmarklet cho một dự án mà tôi hiện đang làm việc và tôi đã tự hỏi thực hành tốt nhất để viết một bookmarklet là gì. Tôi đã làm một số tìm kiếm xung quanh và đây là những gì tôi đã đưa raThực hành tốt nhất để viết bookmarklets

javascript:void((function() 
    { 
    var%20e=document.createElement('script'); 
    e.setAttribute('type','text/javascript'); 
    e.setAttribute('src','http://someserver.com/bookmarkletcode.js'); 
    document.body.appendChild(e) 
    })()) 

Tôi cảm thấy đây là tốt đẹp vì mã luôn có thể được thay đổi (kể từ khi yêu cầu của nó mỗi lần) và nó vẫn hoạt động như một bookmarklet. Có bất kỳ vấn đề gì với phương pháp này không? Trình duyệt không tương thích vv? Thực hành tốt nhất cho việc này là gì?

+0

Bài viết này cung cấp mẫu bookmarklet phù hợp với tôi http://www.latentmotion.com/how-to-create-a-jquery-bookmarklet/ –

+0

Đây là một liên kết thay thế mà tôi đã sử dụng trước đây. http://benalman.com/code/test/jquery-run-code-bookmarklet/ –

Trả lời

3

Có vẻ OK. Nhưng nếu tập tin js của bạn đã được lưu trữ, nó sẽ không được yêu cầu mỗi lần. Vì vậy, bạn cần nó để nối thêm '?' + new Date() vào thuộc tính src của bạn để đảm bảo nó được yêu cầu mỗi lần.

+0

Đúng. Tôi đồng ý!! –

7

Dấu trang đó sẽ thêm bản sao mới của tập lệnh vào tài liệu mỗi khi nó được chạy. Đối với các trang tồn tại lâu dài (ví dụ: Gmail), điều này có thể tăng lên rất nhiều mức sử dụng bộ nhớ và nếu tải tập lệnh của bạn có tác dụng phụ, chúng sẽ xảy ra nhiều lần. Một chiến lược tốt hơn là cung cấp cho tập lệnh của bạn một id và kiểm tra sự tồn tại của phần tử đó trước, ví dụ:

var s = document.getElementById('someUniqueId'); 
if (s) { 
    s.parentNode.removeChild(s); 
} 
s = document.createElement('script'); 
s.setAttribute('src', 'http://example.com/script.js'); 
s.setAttribute('type', 'text/javascript'); 
s.setAttribute('id', 'someUniqueId'); 
document.body.appendChild(s); 

N.B. một lựa chọn khác là giữ tập lệnh hiện tại nếu nó đã có trong tài liệu. Điều này có thể tiết kiệm một số lưu lượng truy cập máy chủ nếu bookmarklet của bạn được sử dụng thường xuyên giữa các lần tải lại trang. Trường hợp xấu nhất là ai đó đang sử dụng một phiên bản cũ của kịch bản của bạn trong một thời gian; nếu bạn không mong đợi nó thay đổi thường xuyên, điều đó có thể ổn.

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