2010-07-23 28 views
5

Tôi là noob với JavaScript và Greasemonkey và tôi muốn viết một kịch bản đơn giản.Greasemonkey & global variables

Tôi biết rằng Greasemonkey kết thúc tốt đẹp mã của bạn bằng một hàm ẩn danh để các biến của bạn không tồn tại sau khi thoát khỏi trang hiện tại. Tuy nhiên, tôi cần một biến toàn cục. tôi cố gắng sử dụng unsafeWindow và cửa sổ đối tượng một cái gì đó như thế này:

if (window.myVar == undefined) { 
    window.myVar = "myVar"; 
} 

Nếu tôi làm mới trang giá trị của tình trạng lúc nào cũng là sự thật.

Có cách nào để sử dụng biến toàn cầu với Greasemonkey không?

Trả lời

4

Bạn đang sử dụng biến toàn cục, nhưng biến toàn cầu chỉ kéo dài miễn là trang đó hoạt động khi bạn làm mới, bạn sẽ xóa tất cả các biến toàn cầu. Cách duy nhất để lưu dữ liệu qua quá trình làm mới trang bằng cookie, tải lên máy chủ hoặc API lưu trữ HTML5. Với mỡ có lẽ bạn sẽ muốn sử dụng một cookie.

15

Bạn phải sử dụng unsafeWindow để tạo biến toàn cầu có sẵn cho phạm vi javascript của trang.

if (unsafeWindow.myVar == undefined) { 
    unsafeWindow.myVar = "myVar"; 
} 

Nhưng bạn không thể mong đợi biến này tồn tại khi bạn làm mới trang, vì javascript bình thường không hoạt động theo cách đó. Nếu bạn muốn lưu một số dữ liệu trên các lần tải trang thì tôi khuyên bạn nên sử dụng GM_setValue & GM_getValue

+0

Có cách nào để lưu biến ngoài chuỗi, booleans và số trên nhiều trang (như GM_setValue và GM_getValue) không? Tôi đã thấy một kịch bản cho Greasemonkey có thể làm điều này một lần, nhưng tôi không nhớ nó là cái gì. –

+1

Hủy tuần tự hóa đối tượng thành JSON, sau đó tuần tự hóa đối tượng đó khi bạn tải biến. –

-5

Nếu bạn đang cố duy trì một biến thông qua làm mới nhiều trang, bạn sẽ cần lưu trữ nó trong cookie.

Tuy nhiên nếu bạn chỉ đơn giản là muốn có một biến toàn cầu trong phạm vi của một trang duy nhất:

var imGlobal; 
(function(){ // Greasemonkey crap... 
... 
imGlobal = "Totally"; 
})(); 
alert(imGlobal) // Alerts "Totally" 
1

Để thiết lập các biến toàn cục trong GreaseMonkey, sử dụng @grant none, nếu không nó sử dụng unsafeWindow, đó là chỉ dành cho GreaseMonkey. Có một số lo ngại về bảo mật. Xem http://wiki.greasespot.net/@grant

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