2011-09-15 77 views
0

我試圖顯示從我的網頁上的其他網站的圖像拼貼。如果我知道直接鏈接,它可以正常工作,因爲我可以設置img src。但是,如果我只知道頁面的名稱和頁面上的圖像的id可以使一些jQuery調用來檢索src。跨域請求通過編號

這樣的事情,但所謂的另一頁上:

var imageSource = $("#pictureid").attr("src"); 
+0

你可以嘗試http://easyxdm.net/wp/,但我不確定它是否適用於你的情況。 – newbie

回答

0

你想要的是通過對其他站點的AJAX調用來獲取HTML,然後通過它查找你感興趣的img標記的src屬性。所有現代瀏覽器都有某種儘管禁止使用相同原點策略 - 您無法對當前文檔域以外的任何內容進行AJAX調用(即,運行在example.org上的頁面上的腳本無法對foobar.com執行AJAX調用)。

這意味着你不得不求助於服務器端技術:在你選擇的服務器端語言中,從外部頁面加載HTML(大多數環境都綁定到libcurl中,它被設計用來做這件事)然後解析它以找到圖像。獲得URL後,您可以輕鬆將其插入到動態HTML中。

也就是說,在沒有許可的情況下深度鏈接圖像會違反網絡禮節,甚至可能是非法的,具體取決於您所在的管轄區域(畢竟濫用其他人的服務器爲訪問者提供帶寬,這可能屬於某些司法管轄區非法黑客行爲的定義);要做的好事是將圖像本身拉入,並在自己的服務器上託管副本,以便您使用自己的帶寬來提供服務。當然,請尊重您使用的圖像的版權以及(如果有的話)許可條款。

+0

感謝您提供的法律信息,我還沒有想過這個項目。該項目實際上是一個瀏覽器擴展,所以html託管在客戶端而不是服務器上。鑑於此,我正在努力保持客戶端的東西。通過服務器訪問網頁似乎很笨拙,而不是直接從客戶端訪問。 – Bnicholas

+0

好吧,如果JavaScript運行在瀏覽器擴展中,同源策略可能不那麼嚴格,儘管我對這些告訴你什麼都沒有太多經驗。你可能會把它關掉。 – tdammers

+0

鉻擴展API使事情變得非常簡單。 – Bnicholas

0

客戶端的JavaScript心不是爲此設計。你想要做什麼屏幕抓取。您可以通過多種方式來完成此任務,最簡單的方法是使用Yahoo的YQL以及使用Node.JS,PHP或您首選的服務器端語言的其他方法。

0

不,如果您希望在您的網站上添加圖片,您需要提供它的網址。

0

嘗試這樣:

首先,我們需要一個短期的服務器端腳本來反彈了我們的請求,因爲AJAX是由相同的起源政策阻礙。這裏有一些在PHP中:

<?php if (isset($_GET['url'])) readfile($_GET['url']); ?> 

假設這是保存在get.php。要使用它,我們只需將查詢字符串的url字段設置爲我們想要獲取的頁面的url。該腳本從該頁面獲取所有HTML並輸出。例如,get.php?url=http://stackoverflow.com/將獲得stackoverfllow索引頁中的所有HTML。

接下來,讓我們寫一些jQuery來檢索url處指定圖片的src。像這樣:

var url = 'http://www.pics.com/'; 
var selector = '#pic8'; 

$.get('get.php', { url: url }, function(htmlResponse) { 
    var pic = $(htmlResponse).find(selector); 
    alert(pic.attr('src'); 
}, 'html'); 

這應該有效。