2011-01-24 50 views
18

Tôi muốn tắt tất cả các liên kết bên trong IFRAME, khi mọi người nhấp vào liên kết đó, cảnh báo sẽ bật lên.Vô hiệu hóa tất cả các liên kết bên trong IFRAME bằng cách sử dụng jQuery

Đây là những gì tôi có cho đến nay, nhưng jQuery không làm gì cả. Không chắc tôi đã làm gì sai.

<iframe id='templateframe' name='templateframe' src="templates/template<?php echo $templateID; ?>/login.html"></iframe> 

$(document).ready(function(){  
     $('#templateframe').contents().find('a').click(function(event) { 
      alert("demo only"); 

      event.preventDefault(); 

     }); 
}); 

Xin cảm ơn trước.

+0

Vâng, điều này không nên bị giới hạn bởi bảo mật trình duyệt. –

Trả lời

6

Hoặc bạn có thể đặt tập lệnh bên trong iframe và do đó rút ngắn mã theo cách này. Nó làm cho nó một hiệu suất nhẹ hơn tôi tin.

$(document).ready(function(){  
    $('a').click(function(event) { 
     alert("demo only"); 
     event.preventDefault(); 
    }); 
}); 
12

Tôi hy vọng rằng $(document).ready sẽ thực hiện trước khi nội dung của khung nội tuyến được tải. Hãy thử sử dụng thuộc tính onload cho iframe thay thế.

+0

Cảm ơn bạn đã trả lời nhanh! Nó hoạt dộng bây giờ. –

+0

Bạn được chào đón :) –

1

Đây là giải pháp chung cho vấn đề của bạn. Hy vọng điều này sẽ làm việc tốt.

$(window).load(function(){ 
    $('#templateframe').contents().find('a').click(function(event) { 
     alert("demo only"); 
     event.preventDefault(); 
    }); 
}); 
0

Thay thế ngăn chặn mặc định, bạn có thể thay đổi liên kết để hiển thị liên kết không còn liên kết nữa.

$('#templateframe').contents().find('a').each(function() { 
    $(this).replaceWith($('<span>' + this.innerHTML + '</span>')); 
}); 
2

Không có câu trả lời nào ở trên sẽ hoạt động trừ khi có thể bạn đang tải nội dung cục bộ bởi vì thời gian sự kiện window.load kích hoạt khung nội tuyến chưa được tải. Bạn có thể thêm người nghe vào khung nội tuyến để tìm tất cả các bên trong iframe và tắt chúng.

$("iframe").load(function() { 
    $("iframe").contents().find("a").each(function(index) { 
     $(this).on("click", function(event) { 
      event.preventDefault(); 
      event.stopPropagation(); 
     }); 
    }); 
}); 
+1

hoạt động cho nội dung được tải từ một miền khác? bảo mật trình duyệt là một vấn đề ở đây? – lol

+0

@lol sửa lỗi này là không thể trừ khi đó là cùng một miền .... –

6

Một huyền thoại qua tại

http://www.webdeveloper.com/forum/showthread.php?182260-Can-we-disable-links-inside-iframes

hồi sinh một kỹ thuật từ những ngày cũ tốt, trở lại khi chúng tôi không có cuộc gọi như -webkit-gradient() và nam giới là nam giới.

Chỉ cần đặt div trong suốt lên trên!

+0

và điều gì sẽ xảy ra nếu tôi muốn cuộn nội dung bên trong của iframe? –

+0

nope, chúng tôi sử dụng điều này từ nhiều hơn một "các nhà thiết kế muốn điều này" quan điểm cần một "cửa sổ đến một trang web" mà không thể được tương tác với. Không thể di chuyển - soz về điều đó! – lol

+0

ahh, chúng tôi đang đối mặt với cùng một vấn đề, ngoại trừ nhà thiết kế cũng muốn cuộn –

7

Giải pháp được đề cập bởi "lol" thực sự hoạt động khá tốt. Tôi tình cờ vô tình sau khi làm việc này trong một vài giờ ...

Đặt khung nội tuyến của bạn bên trong phần tử div, sau đó làm cho div trong suốt và đẩy chỉ mục z của khung nội tuyến phía sau div. Xem ví dụ sau:

<div class="container"> 
    <iframe class="lockframe" src="www.google.com"></iframe> 
</div> 

Sau đó thiết lập css của bạn như thế này:

div.container { background: transparent; } 
div.lockframe { z-index: -2; } 

tải lên trang web của bạn và các div là những gì sẽ chấp nhận những sự kiện nhấp chuột, không phải là iframe.

10

Tôi cũng đang tìm cách vô hiệu hóa các liên kết iframe và không thể tìm thấy giải pháp. Nhờ HTML5, bạn có thể dễ dàng vô hiệu hóa các liên kết bằng cách thêm thuộc tính sandbox.

<iframe src="externalsite.com" sandbox></iframe> 

view demo

Tôi hy vọng điều này sẽ giúp người tìm kiếm trên mạng, đặc biệt là kể từ khi câu hỏi này bật lên đầu tiên trên Google.

+1

Nhưng nếu bạn cần sử dụng 'sandbox = "allow-scripts" ', các liên kết sẽ được bật lại. Điều đó sẽ tốt đẹp nếu bạn có thể cho phép javascript cho hoạt ảnh, v.v. nhưng vô hiệu hóa các liên kết. –

+0

Theo quan sát của tôi, thuộc tính 'sandbox' chặn tất cả các liên kết ngoại trừ thuộc tính có số điện thoại, như: '123.456.7890'. Ví dụ: http://jsbin.com/bacukifudu/1/edit?html,output –

+3

Điều này không đúng. Ví dụ của bạn là thiếu sót. Các liên kết tại * www.paypal-gifts.com/us/giftcardlist/* không phải là liên kết nào cả, mà thay vào đó là các hàm javascript thay đổi vị trí. 'sandbox' sẽ ngăn chặn các tập lệnh thực thi, nhưng không tắt các neo HTML. –

1

Tôi nghĩ rằng không có giải pháp được đề xuất nào (ngoài hộp cát html5) sẽ hoạt động nếu bạn chưa đặt Access-Control-Allow-Origin trên máy chủ nguồn. Để giải quyết vấn đề này, trong một số trường hợp, người dùng có thể sử dụng máy chủ proxy, truy xuất nội dung của trang trên máy chủ khác, phân tích mã html, loại bỏ các liên kết và trả lại kết quả cho trình duyệt của khách hàng.

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