2014-01-17 70 views
1

以下是我的html/javascript。下面有兩條if語句,我已經嘗試過了。我用indexof來獲取標籤之間的文本。還試過href ==使用href =內容。兩者都不起作用。使用Javascript以編程方式點擊iframe中的鏈接

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>pb</title> 
    <script type="text/javascript"> 
    function call() { 
     alert("Called!"); 
     var allAnc = document.getElementById("d").contentDocument.getElementsByTagName("a"); 
     for (var i = 0; i < allAnc.length; i++) { 
      if (allAnc[i].href.indexOf("Flag") > 0) { 
       alert("Found link by indexof, Trying to click!"); 
       (allAnc[i]).click(); 
       break; 
      } 
      if (allAnc[i].href == "javascript:flag.closeit()") { 
       alert("Found link by href, Trying to click!"); 
       (allAnc[i]).click(); 
       break; 
      } 
     } 
    } 
</script> 
</head> 
<body> 
    <input id="Button1" type="button" onclick="call()" value="button" /> 
    <iframe id="d" src="sourceurl.html" width="100%" height=700"></iframe> 
</body> 
</html> 

這裏是IFRAME我試圖點擊裏面的鏈接:

<a style="text-align: left;" href="javascript:flag.closeit()" title="Flag">Flag</a> 
+0

是來自相同域還是不同域的iframe? – colllin

+0

不同的域 – user2668641

+1

@ user2668641你無法讀取另一個域的內容。 –

回答

0

這裏的問題的演示,代碼大多複製&從你的問題粘貼:

http://jsfiddle.net/colllin/G2BDb/

而內部的iframe代碼在這裏:

http://jsfiddle.net/colllin/wc8Up/

正如你可以在控制檯中看到,當你點擊按鈕,

Refused to display 'https://www.google.com/#Flag' in a frame because 
    it set 'X-Frame-Options' to 'SAMEORIGIN'. 

所以看起來,如果你有控制iframe要鏈接到的頁面,你可以設置X-Frame-Options頭在該網頁上被指定一個ALLOW-FROM URI(from MDN):

ALLOW-FROM uri 
    The page can only be displayed in a frame on the specified origin. 

或者,如果您可以控制原始iframe源(我假設您這樣做,否則甚至無法訪問內容,更不用說單擊鏈接),您可以在單擊鏈接之前將target="_top"屬性添加到鏈接。 這將導致鏈接頁面替換窗口中的頂級頁面。

演示在這裏:http://jsfiddle.net/colllin/G2BDb/2/

1

從您的意見,您加載不同的域的內容到你的iframe,這樣你就不能讀取域由於same origin policy限制的內容。

相關問題