2011-07-10 49 views
21

Tôi cố gắng chạy mã JavaScript này vào thanh địa chỉ trong trình duyệt Firefox 6:cảnh báo JavaScript không làm việc trong Firefox 6

javascript:alert("Hello") 

tôi nhận được một

ReferenceError: alert not defined.

Nó được sử dụng để làm việc tốt trong Firefox 5 mặc dù và vẫn hoạt động trên Opera, Safari và Chrome. Làm thế nào để sửa lỗi này?

+0

Tôi làm như thế nào? – Ryan

+0

@ Ryan: Bằng cách thực hiện chính xác những gì bạn đã làm với câu trả lời của tôi: Chấp nhận câu trả lời giúp bạn nhiều nhất. Bạn nên quay lại câu hỏi cũ của bạn và làm như vậy. –

Trả lời

21

Dường như sử dụng javascript:data: URL (trực tiếp vào thanh địa chỉ) đang không được phép as per this comment:

FYI, I'm probably going to split this bug into multiple, short and longer term fixes.

Short term: disallow pasting of javascript: URLs into the URL bar
Longer term: additionally require that bookmarklets be "whitelisted" in the Bookmark Manager before it can run JavaScript

this is the "bug" đó đã được giải quyết trong latest version. Các last comment cũng khẳng định:

javascript: is not actually ignored - they're run, but in an "empty" context that doesn't have any of the usual DOM methods you would expect, so most common uses (e.g. javascript:alert(1)) just throw (and thus are effectively ignored). javascript:1+1 works fine, though.

Bây giờ là:

How do I fix this?

Bạn có thể không, bạn phải đợi cho đến khi họ đã quyết định cho một giải pháp thích hợp. Theo nhận xét, bookmarklet sẽ hoạt động, nhưng phải được cho phép một cách rõ ràng. Nếu bạn chỉ muốn thử nghiệm mã, hãy sử dụng Firebug hoặc tính năng Scratchpad mới.

+0

Hai người tham khảo cùng một báo cáo lỗi trong vòng 25 giây của nhau. : D Tôi đã xóa câu trả lời của tôi vì điều này chi tiết hơn. – Quentin

+3

Điều này "sửa lỗi" chỉ bị hủy hoại một dự án 2 tháng tôi đã làm việc trên. :( – GeReV

+7

@GeRev mà phải có được một địa ngục của một bookmarklet ... –

10

Câu trả lời của Felix nêu rõ lý do tại sao javascript: trong thanh URL không hoạt động nữa.

Thay thế cho điều này, nếu bạn đang cố gắng gỡ lỗi trang web của mình, là Bảng điều khiển Web (không bị nhầm lẫn với Bảng điều khiển lỗi). Trong menu nhỏ gọn, nó nằm trong Web Developer; trong thanh trình đơn đầy đủ, bên dưới Công cụ. Hoặc bạn có thể nhấn ctrl-shift-K (cmd-shift-K trên mac). Thanh có ký hiệu lớn hơn là dấu nhắc JavaScript; mã được nhập vào đó sẽ được đánh giá trong ngữ cảnh của trang hiện tại. Bất cứ điều gì trong khu vực phía trên thanh đó gạch chân có thể được nhấp vào để đưa ra một cửa sổ thanh tra.

+1

+1 cho Bảng điều khiển Web ... Tôi đã nghe, nhưng đã quên nó;) –

+0

* * lệnh + alt + K trên máy mac. Ngày buồn, tôi sẽ bỏ lỡ gõ javascript trong thanh địa chỉ ... –

1

Nếu bookmarklet có thể nhấp của bạn bị hỏng và bạn muốn nó trở lại, bạn có thể tạo một nút có thể nhấp thay vì sử dụng Custom Buttons tiện ích mở rộng của Firefox.

Những lợi thế nút trên chạy từ Scratchpad:

  • bạn có thể thực sự tiết kiệm bookmarklet (nút),
  • bạn có thể có một đẹp biểu tượng riêng (tạo ra một số hình ảnh ví dụ như PNG , nhập khẩu nó và base64_encode nó bên trong hộp thoại nút mới).

Phần mở rộng là một chút đặc biệt vì các nút chạy ở Firefox chrome mức, vì vậy họ đang ưu tiên hơn một chút (bạn có thể tương tác với các API của trình duyệt), và không có 1-to-1 tương ứng giữa JS bình thường và mã nút (, cần chỉnh sửa). Chính xác hơn, documentwindow được nhìn thấy từ nút không phải là thứ bạn mong đợi.

Tuy nhiên, bạn có thể gán 'tốt' windowdocument cho các biến của bạn, và sau đó làm việc trên các biến này thay vì (tốt hơn không xác định lại cửa sổ;)

Dưới đây là một số mẫu mã tôi viết mà hoạt động khá tốt trong Fx10 :

// get proper 'window' and 'document' into our private variables 
var theWindow = window.top.getBrowser().selectedBrowser.contentWindow; 
var theDocument = theWindow.document; 

// here we go 
var input = theDocument.getElementById("foo"); 
input.focus(); // just to show you it's working, unnecessary in fact 

// simulate keyboard event 
var evt = theDocument.createEvent("KeyboardEvent"); 
evt.initKeyEvent ("keypress", true, true, theWindow , 
      0, 0, 0, 0, 0, 65); // 65 == "A" 
input.dispatchEvent(evt); 

// show alert after 2 sec 
theWindow.setTimeout(function(){ 
    input.value += "B"; 
    theWindow.alert(input.value); // alerts "AB" 
},2000); 

thay vì sử dụng các chức năng toàn cầu trực tiếp (như setTimeout, hoặc alert), bạn cần phải đặt theWindow. trước mặt họ, và thay thế document/window với địa phương theDocument/theWindow và có vẻ như nó đang hoạt động. Tôi đã không thử nghiệm nó kỹ lưỡng tuy nhiên với trường hợp rất phức tạp.

Để thêm nút, nhấp chuột phải vào bất kỳ nút nào bạn đã có và chọn 'Thêm nút mới ...'.

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