2011-01-24 109 views
18

我想禁用IFRAME中的所有鏈接,當用戶點擊這些鏈接時,會彈出警告。使用jQuery禁用IFRAME內的所有鏈接

這是我到目前爲止,但jQuery什麼也沒做。不知道我做錯了什麼。

<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(); 

     }); 
}); 

在此先感謝。

+0

那麼,這不應該受到瀏覽器安全性的限制。 – 2011-01-24 00:55:36

回答

6

否則,你可以把腳本放入iframe本身,從而縮短代碼。它使我相信它的性能更輕。

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

我認爲$(document).ready在加載iframe的內容之前執行。嘗試使用iframe的onload屬性代替。

+0

謝謝你的快速回答!它現在有效。 – 2011-01-24 01:02:17

+0

不客氣:) – 2011-01-24 01:03:43

1

這是您的問題的通用解決方案。希望這會運作良好。

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

作爲防止違約的替代方法,您可以將錨點更改爲跨度,以便更明顯地看到鏈接不再鏈接。

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

以上都不是答案,將工作,除非也許你是因爲由window.load事件觸發的IFRAME沒有通常還加載時間本地加載內容。您可以將偵聽器添加到iframe中,以查找iframe中的所有a並將其禁用。

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

爲從不同域加載的內容執行此項工作嗎?瀏覽器安全是一個問題嗎? – lol 2013-12-13 23:00:03

+0

@lol糾正這是不可能的,除非它是相同的域... – 2016-06-12 13:35:47

7

「lol」提到的解決方案實際上工作得很好。我在工作了幾個小時後偶然發現了這個......

把你的iframe放到一個div元素中,然後讓div透明,並把div後面的iframe的z-index。看到這個例子:

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

然後設置你的CSS是這樣的:

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

載入您的網頁和DIV是什麼將接受click事件,而不是iframe中。

10

我正在尋找以禁用iframe鏈接,並找不到解決方案。由於HTML5,您只需添加​​屬性即可輕鬆禁用鏈接。

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

view demo

我希望這可以幫助別人搜索網,特別是因爲這個問題,首先彈出的谷歌。

1

我認爲如果您尚未在源服務器上設置Access-Control-Allow-Origin,則建議的解決方案(除html5沙箱之外)都不會起作用。 爲了解決這個問題,在某些情況下,可以使用代理服務器,檢索另一臺服務器上的頁面內容,解析html代碼,擺脫鏈接並將結果返回給客戶端瀏覽器。

相關問題