如果我正確地理解了這個問題,由於您遇到的域限制,您可能無法單獨使用Javascript。但是,如果您有一些使用shell腳本或任何腳本語言的知識,那應該沒有問題,您只需調用舊的curl即可。
例在PHP中:
<?php
$url = "http://www.example.com/index.html";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
$fp = curl_exec($ch);
curl_close($ch);
?>
而這幾乎是它。您在$ fp變量中擁有實際的HTML代碼。所以,總而言之,我要做的是向PHP中寫入一個Javascript Ajax函數,它執行curl,然後通過echo將返回的$ fp變量返回給Javascript回調函數,然後將其插入到文檔中(使用innerHTML或DOM)和bam,你可以訪問所有的東西。或者你可以用PHP解析它。無論哪種方式,如果你通過捲曲來做,應該工作得很好。希望有所幫助。
編輯:經過一番思考,我似乎記得Safari刪除了本地主機的跨域限制。經過一番研究後,我找不到任何支持這種理論的文檔,所以我深入挖掘了一下,發現了一個更好的(雖然很冒險的)方式來通過Apache來完成整個混亂,如果你使用它(它你可能是)。
Apache的mod_proxy會收到類似「/ foo」的請求,並將請求實際傳送到某個遠程目標,如「http://dev.domain.com/bar」。最終的結果是,您的網絡瀏覽器認爲您撥打了http://localhost/foo,但實際上您正在從遠程服務器發送和檢索數據。解決安全問題!
例子:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
讓我們假設我想在http://dev.domain.com/remote/api.php訪問文件。你會把所有以下的爲:
# start mod_rewrite
RewriteEngine On
ProxyRequests Off
<Proxy>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /apitest/ http://dev.domain.com/remote/api/
ProxyPassReverse /apitest/ http://dev.domain.com/remote/api/
RewriteRule ^/apitest/(.*)$ /remote/api/$1 [R]
Source
更多編輯:
看到,只要你想如何避免整個服務器設置的東西,我用了它一個鏡頭一個IFRAME在Safari(蘋果機),和它的工作,至少我試過域:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
</head>
<body>
<iframe src="http://www.stackoverflow.com/"></iframe>
</body>
</html>
這可能會起作用。然而,如果網頁做了任何一種奇特的步法(就像擁有它自己的DOM那麼多的javascript),那不會讓我得到我需要的東西。 – BCS 2009-01-14 06:38:26
哦,是的,但除非你真的可以將代碼添加到第三方網站,我懷疑,可能沒有辦法實際獲得他們的DOM操作。 但是,如果有機會在Mac或Windows機器上工作,我認爲Safari沒有localhost的域限制。 – David 2009-01-14 06:41:36
因此,從本地主機加載的頁面可以有一個JavaScript與非幀/ iframe的?很高興知道。 – BCS 2009-01-14 06:50:55