2008-08-12 43 views
41

Tôi nghĩ rằng lý do tôi không thể làm điều này là vì nó có thể là một lỗ hổng bảo mật khổng lồ, nhưng ở đây ...Thêm dấu trang chỉ là javascript, không phải là URL

Tôi muốn có một đánh dấu trên trình duyệt của tôi (FF3, tốt hơn) đó chỉ là một đoạn mã javascript. Nó sẽ chỉ xây dựng một URL dựa trên ngày hiện tại và sau đó thực hiện một window.location = trên URL đó.

Tôi biết rằng tôi có thể tạo một trang và giữ nó trên máy cục bộ của tôi và chỉ đề cập đến nó theo cách đó, nhưng tôi tự hỏi liệu bạn có thể bỏ qua bước đó và thực sự có "vị trí" của dấu trang thực sự là javascript. Tôi có thể thề rằng điều này đã có thể xảy ra nhiều năm trước, nhưng tôi không thể tìm thấy bất cứ điều gì mà nói với tôi một trong hai cách bây giờ.

Trả lời

54

Điều bạn muốn là bookmarklet chúng dễ tạo và nên hoạt động trong hầu hết các trình duyệt chính.

Chỉnh sửa: Stack tràn dường như không cho phép tạo ra bookmark trong bối cảnh của trang web, về cơ bản bạn có thể tạo một bookmark mới và gõ như sau trong lĩnh vực vị trí

javascript:window.location='http://www.google.com/search?q='+Date()

để có được một bookmarklet để tìm kiếm google cho ngày hiện tại.

8

Vâng, tôi vừa tạo một bookmark trong FF3, quay trở lại và cập nhật nó và thêm vào các thử nghiệm sau đây:

javascript:alert('Wacky%20test%20yo'); 

Thấp và behold, sau khi tôi lưu và tải, tôi đã có thể nhận được cảnh báo của tôi.

Tôi chắc chắn bạn có thể làm việc tương tự cho nhu cầu của mình.

11

Một lượt đánh bắt nhỏ. IE chỉ có thể xử lý URL ký tự ở định dạng này. Nếu bạn lưu nó trong IE với một url dài hơn này, nó sẽ cắt ngắn mà không có cảnh báo và do đó thất bại.

Nếu bạn cần tập lệnh thực sự phức tạp, bạn sẽ cần sử dụng dấu trang "được lưu trữ", nơi bạn có dấu trang để chèn thẻ tập lệnh vào trang, để "gọi" bookmarklet được lưu trữ của bạn.

Nó không phải là tốt đẹp/di động, nhưng giải pháp duy nhất của nó.

+5

Vì vậy, mô hình cho điều này là một cái gì đó như: javascript: (function() { document.body.appendChild (document.createElement ('script')) .src = 'http: //www.yoursite.com/js/bookmarklet.js';})(); – Shermozle

+0

chính xác. Bạn chỉ cần tải nội dung tập lệnh mà bạn muốn từ một số trang web khác. – scunliffe

9

Google Bookmark

javascript:(function(){var%20a=window,b=document,c=encodeURIComponent,d=a.open("http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk="+c(b.location)+"&title="+c(b.title),"bkmk_popup","left="+((a.screenX||a.screenLeft)+10)+",top="+((a.screenY||a.screenTop)+10)+",height=420px,width=550px,resizable=1,alwaysRaised=1");a.setTimeout(function(){d.focus()},300)})(); 
19

Nó là đáng chú ý là bạn có thể đặt rằng trong một wrapper chức năng là tốt. imranamajeed độc đáo minh họa cho chúng tôi ... nhưng dường như tôi quá mới để trang web đăng bài của anh ấy. : P

để cho rõ ràng:

javascript:(function(){ 
    location.href = location.href + "#"; 
})(); 

(các kí tự xuống dòng không ảnh hưởng đến hiệu suất trong chrome và IE)

+0

Có, gói nó trong một chức năng ngăn cản giá trị trả lại từ rối tung với cửa sổ hiện tại. – mb21

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