2011-03-18 31 views
2

我需要編寫一個web應用程序,它將檢查網站是否包含元素(例如div與id =「iamhere」)。此網站可以是任何網站,它與我的腳本不在同一個域中。我想過做類似這樣的事情:加載不同的網站後執行JavaScript

  1. 轉到我的網站,載入JavaScript庫。
  2. 加載其他網站。
  3. 執行我的功能。

這似乎是不可能的 - 我是對的(腳本執行在window.location.assign()後停止,並且沒有辦法將腳本標籤「綁定」到站點的DOM)? 有沒有人有一個想法,如何使其工作?我知道我可以使用yql,但也許有更好的解決方案。

+0

聽起來像它不可能對明顯的安全原因。 – Haochi 2011-03-19 00:12:40

+0

@Haochi:是的,沒有腳本作爲代理似乎是不可能的。 – david 2011-04-11 16:35:52

回答

0

查看JavaScript的setTimeout()函數。您可以定期檢查任何類似的東西的準備情況:

function checkReadyState() 
{ 
    if (somethingIsReady) { 
    doStuffWhenReady(); 
    } 
    else { 
    setTimeout(function() { checkReadyState(); }, 200); //Waits 200 milliseconds and calls checkReadyState() again. 
    } 
} 
+0

頁面更改後超時不會觸發。 – icktoofay 2011-03-19 02:09:18

+0

他正在討論加載另一個網站的頁面 - 所以我認爲它是在iframe之內的。 – Kon 2011-03-20 14:06:16

+0

它可能位於iframe中,但在大多數(每個?)瀏覽器中禁止修改iframe內容。 – david 2011-04-11 16:35:11

0

您需要使用腳本語言獲取網站以充當代理。我將在這個例子中使用PHP:

<?php 

$file = file_get_contents('http://www.google.com'); 

echo $file; 

?> 

當需要填充div - 你可以用你的javascript做到這一點。如果你使用jQuery,它看起來像這樣:

<script> 
$(function(){ 
    $('#amihere').load('myphpproxyfile.php'); 
}); 
</script> 
0

我會使用YQL。

替換最後2個查詢字符串參數並檢查json結果。

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%[email protected]%20and%[email protected]=json&callback=cvfunc&url=<your-url>&xpath=<your-xpath> 

例子:

http://query.yahooapis.com/v1/public/yql?format=json&callback=cbfunc&url=http://www.stackoverflow.com&xpath=//div[@id=%27header%27]&q=select%20*%20from%20html%20where%[email protected]%20and%[email protected]