簡體   English   中英

使用Javascript訪問IFrame的HTML

[英]Access HTML of IFrame using Javascript

我正在嘗試訪問IFrame中正在顯示的按鈕。 然后,我想為該按鈕附加一個偵聽器。 但是,我似乎無法訪問IFrame。 假設按鈕的ID為button 我該怎么做。

這是我的示例代碼:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <script>
            function test() {
                var temp = $("myIframe").contents();
                alert(temp);
                var temp2 = temp.find("body");
                alert(temp2);
                var temp3 = temp2.html();
                alert(temp3);
            }
        </script>
        <h:form>
            <p:commandButton value="Click" onclick="test();"/>
        </h:form>
        <iframe id="myIframe" src="http://test.com" height="200" width="500"/>
    </h:body>
</html>

temp和temp2的警報起作用,但是temp3未定義。 有人可以幫忙嗎?

出於安全原因,不能做。

想象一下能夠創建一個頁面,該頁面在隱藏的IFRAME中打開Facebook,然后使用腳本竊取身份驗證Cookie或操縱DOM在每個人的牆上張貼垃圾郵件。

出於非常充分的理由,您無法訪問其他網站上的內容。 您將必須實現另一種方式來訪問此其他信息,例如服務器端API。

您無法通過JavaScript訪問iframe內容

那可能是嚴重的安全問題。

您可以實現的唯一方法是將CURL與PHP /其他語言一起使用,並通過服務器呈現它。

ajax(jquery)和php CURL的示例

<script>
var lat = $.ajax({
url: "function.php?function=curl",
async: false
}).responseText;
</script>

然后在function.php中執行CURL,回顯您想要的內容,然后在lat JS Var中得到響應。 因此,如果您這樣做:

<script> alert (lat); </script>

您應該從CURL中看到數據。

在function.php中,您將需要使卷曲看起來像這樣:

if($_GET["function"] == "curl") {
$url = 'http://whichever.url.you.need';
 $curl_handle = curl_init();
  curl_setopt($curl_handle, CURLOPT_URL, $url);
  curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
  curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl_handle, CURLOPT_COOKIEJAR, $cookie_file_path);
  curl_setopt($curl_handle, CURLOPT_COOKIEFILE, $cookie_file_path);
  //curl_setopt($curl_handle, CURLOPT_POST, 1);
  //curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $post);
  $buffer = curl_exec($curl_handle);
  curl_close($curl_handle);
  // check for success or failure
  if (empty($buffer)) {
  echo 'Something went wrong :(';
  } else {
  echo $buffer;
  }
    }

如果您同時控制父框架和iframe,則可以使用子框架到父框架的消息傳遞來完成。

讓父框架偵聽消息。

<div id="myDiv">
    <iframe src="childFrame.html" id="frame1"></iframe>
</div>

<script>    
window.onmessage = function(e) {
     if(e.data == "click") {
        alert("Button Clicked!");
     }
}
</script>

iframe可以將消息發送到父框架。

<button onclick="parent.postMessage('click', '*');">Hide</button>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM