2009-08-18 46 views
8

Tôi có chức năng JS để thăm dò url hiện tại trong khung nội tuyến, mục đích là để xác định liệu iframe có trỏ đến cùng một trang web như tài liệu chính hay không. Như vậy, mã cơ bản:Loại bỏ lỗi "quyền bị từ chối" trong Javascript

function urlCheck() 
{ 
    var location = document.getElementById('frameid').contentWindow.location.href; 
    if (location) 
    { 
    // iframe src is currently local 
    } 
    else 
    { 
    // iframe src is currently not local 
    } 
} 

Chức năng, mã này hoạt động hoàn hảo. Tuy nhiên, trong bảng điều khiển lỗi, mỗi lần hàm này được gọi và iframe src không phải là cục bộ, tôi nhận được lỗi:

Permission denied for [site1] to get property Location.href from [site 2]

Làm cách nào để sửa lỗi của mình?

Cảm ơn, Mala

Trả lời

12

Bọc mã của bạn trong một khối try-catch sẽ có thể nắm bắt và giải quyết các lỗi này.

+0

Cảm ơn bạn. Tôi không biết JS hỗ trợ phương pháp try-catch. Liên kết là rất hữu ích và chức năng của tôi bây giờ hoạt động lỗi miễn phí :) – Mala

0

Thực tế, thông báo lỗi là thông tin bạn muốn: Ngay sau khi URL của khung nội tuyến trỏ đến một tên miền khác, bạn sẽ nhận được các lỗi về quyền. Đây là biện pháp an toàn để tránh XSS attacks.

[EDIT] Điều này có nghĩa là bạn có thể thay thế mã trên với:

function urlCheck() 
{ 
    try 
    { 
    document.getElementById('frameid').contentWindow.location.href; 

    // iframe src is currently local 
    } 
    catch (e) 
    { 
    // iframe src is currently not local 
    } 
} 
+1

Có thể bắt lỗi thực sự tiếp xúc với bạn một cuộc tấn công XSS mặc dù? Anh ấy không thực sự thay đổi quyền, chỉ cần vệ sinh những gì người dùng nhìn thấy. – DanSingerman

+1

Aaron: cảm ơn bạn đã đảm bảo rằng tôi đang cẩn thận. Trên thực tế, tôi không thực sự cần thông báo lỗi. Về cơ bản, mã của tôi bây giờ nói "set var location = false; cố gắng đặt vị trí thành url của iframe; if (location) {do stuff}". Như vậy, tôi khá chắc chắn rằng tôi an toàn. DanSingerman là chính xác - Tôi chỉ ghét nó khi các trang web bog xuống bảng điều khiển lỗi của tôi với lỗi (làm cho gỡ lỗi JS của tôi trong khi lướt các trang web khác một nỗi đau trong R-se = P) vì vậy tôi đang cố gắng tránh làm điều đó cho người khác. – Mala

+1

@DanSingerman: Tất nhiên là không. Xem chỉnh sửa của tôi. –

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