2012-04-01 28 views
5

Trong mã của tôi, tôi có một dòng mà bãi cửa sổ hiện hành (mà sẽ xảy ra là một trang video youtube):JavaScript có thể nhìn thấy trong Firebug, không thể tiếp cận trong mã

Firebug.Console.log(myWindow); 

Có thể thấy rằng đối tượng cửa sổ chứa "yt" bất động sản, đó là một đối tượng có thể dễ dàng kiểm tra trong debugger:

http://i.imgur.com/lHHns.png

Thật không may, gọi

Firebug.Console.log(myWindow.yt); 

nhật ký "chưa được xác định" - tại sao vậy và làm cách nào tôi có thể truy cập thuộc tính "yt" này?

Chỉnh sửa: một addidtion có thể quan trọng: mã tôi viết là một phần của phần mở rộng firefox, vì vậy nó không thực sự chạy bên trong tảo, nhưng trong chrome - Tôi bắt đầu nghĩ rằng nó có thể là nguyên nhân. Các tập lệnh chrome có thể bị giới hạn bằng cách nào đó trong những gì họ có thể thấy/acces thay vì mã trong các thẻ tập lệnh không?

+0

Đoán của tôi là điều cần làm với Firebug, vì tôi có thể truy cập nó tốt từ bảng điều khiển Chrome. – Griffin

+0

Chỉ cần đảm bảo, bạn có gọi là 'Firebug.Console.log (myWindow.yt); 'chính xác cùng dòng với' Firebug.Console.log (myWindow); '? –

+0

@Griffin: đó không phải là trường hợp, tôi có thể truy cập nó thông qua Chrome hoặc các công cụ phát triển khác, nhưng nó vẫn vô hình đối với mã đang chạy trong trình duyệt - không chỉ tôi không thể đăng nhập thông qua Firebug, tôi không thể gọi nó phương pháp cũng không phải bất cứ điều gì. –

Trả lời

2

Vì lý do bảo mật, tiện ích mở rộng của Firefox không truy cập trực tiếp vào các đối tượng trang web nhưng thông qua số wrapper. Trình bao bọc này cho phép bạn sử dụng tất cả các thuộc tính được xác định bởi các đối tượng DOM nhưng bất kỳ thứ gì được thêm bởi JavaScript trang sẽ là vô hình. Bạn có thể access the original object:

Firebug.Console.log(XPCNativeWrapper.wrappedJSObject.yt); 

Tuy nhiên, nếu bạn muốn tương tác với các trang web từ một phần mở rộng bạn nên cân nhắc lựa chọn thay thế mà trang web không thể lừa gạt bạn (ví dụ như chạy mã không có đặc quyền trong cửa sổ nội dung: myWindow.location.href = "javascript:...") .

0

Tiện ích mở rộng của Firefox và Chrome không thể truy cập JavaScript trong trang vì lý do bảo mật.

0

Tôi đã thấy sự nhầm lẫn như thế này bằng cách sử dụng API không đồng bộ.

console.log(obj); cho biết nội dung của đối tượng đã được điền đầy đủ, nhưng khi truy cập các thuộc tính đối tượng trong mã, chúng không thực sự được phổ biến do cuộc gọi không đồng bộ.

Tại sao Chrome và Firefox hiển thị tất cả chúng được điền vào có lẽ chỉ là vấn đề thời gian vì chúng có thể xử lý console.log() không đồng bộ.

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