2013-10-03 32 views
6

我想在另一個網站上自動填充文本框,所以我正在編寫一個簡短腳本來執行此操作。我正在加載一個帶有網站的iframe,如果這個iframe被加載,它應該填寫輸入文本表單。所以我在autofill.php寫了這個:在iframe中的其他網站上填寫輸入文本表單

<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> 
<script src="fill.js"></script> 
<iframe name="autofillframe" src="https://e-services.blum.com/main/" style="width:100%; height:100%;"></iframe> 

這我fill.js寫道:

$(document).ready(function(e) { 
    $('#username').val('username'); 
    $('#kennwort').val('password'); 
}); 

這裏是一個fiddle

如果我以.php文件,而不是一個網站做到這一點,它工作正常。 這裏有一個demo沒有網站

有人可以給我一個提示嗎?

乾杯

回答

12

當加載來自不同域的頁面到一個iframe,你不能做任何事情從JavaScript的iframe頁面在頁面中。

就瀏覽器而言,iframe是一個單獨的窗口,您無法訪問它。想象一下,用戶在一個窗口中打開了一個銀行頁面,並且您的頁面在另一個窗口中打開。你知道瀏覽器不會讓你的JavaScript代碼干擾銀行頁面,對吧?

當另一頁在iframe中時,同樣的事情適用。它仍然是一個完全獨立的瀏覽器窗口,只是它看起來像在你的頁面中。

在您的工作示例中,代碼工作的原因是來自不同域的iframe中的用戶名和密碼字段爲而非。它們是JavaScript代碼所在頁面的一部分。

如果iframe從與主頁相同的域加載,那麼您可以執行任何您想要的操作,包括填寫表單域。代碼會稍有不同,因爲您需要訪問iframe文檔而不是主頁文檔,但這很容易。但是,如果iframe來自不同的域,那麼您運氣不好。

+0

嗯好吧,聽起來合乎邏輯。有另一種方式或者這是不可能的嗎? – Roman

+0

真的沒有辦法,對不起!瀏覽器安全將不允許它。 –

+0

恩好,真可惜。感謝支持我:) – Roman

2

通過按提交按鈕,輸入值從輸入文本框複製到iframe文本框(或與其相反)。 可以實現它想:

test1.html

<!doctype html> 
<html> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    <script> 
     $(document).ready(function(){ 
      $('#submit').click(function(){ 
       var iframe = document.getElementById('myiframe'); 
       var doc = iframe.contentDocument || iframe.contentWindow.document; 
       var elem = document.getElementById('username'); 
       doc.getElementsByName('user')[0].value = elem.value; 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <input type="text" id="username"> 
    <input type="submit" id="submit"> 
    <iframe id="myiframe" frameborder="1" src="test2.html"></iframe> 
</body> 
</html> 

而且test2.html:

<!DOCTYPE html> 
<html> 
<body> 
    <input type="text" name="user" id="user"> 
</body> 
</html> 
相關問題