2012-08-14 98 views
1

我正在爲希望將自己的動態最新新聞Feed嵌入到我們網站右側的客戶進行項目工作。這是一個相當自定義的模塊,包含視頻和鏈接,而不僅僅是RSS或Twitter。在沒有iframe的情況下導入外部URL內容

客戶端已經將這些內容上傳到他們的服務器上,作爲專門爲我們抓取的頁面,並提供給我們URL。

我可以使用iFrame嵌入內容,但是它們的鏈接中沒有target =「_ parent」,所以如果單擊鏈接,新內容將加載到iframe中,這不是我們想要的。我們希望它在新標籤中打開。我們不能改變他們的內容,或者不幸地要求他們兩週 - 這太遲了!爲了讓它更加煩人,我們不在同一個域上。

我們的系統建立在我不知道的asp.net上(我是更多的PHP!)。還值得一提的是,我是該角色的前端開發人員,無法訪問或修改任何asp.net代碼。

我試過使用jQuery .load()沒有成功。作爲一個新手,我不確定正確的方式去做這件事,或者甚至可能使用前端技術?

似乎對我的類似問題都是過時的和過時的,所以最好採用最新和最好的方法。

謝謝。

回答

0

那麼,如果你使用​​來吸引他們的內容,它就有一個回調函數用於完成它。只需循環瀏覽該部分中的所有鏈接,並將其target=更改爲在新標籤頁中打開!

css: target-new: tab ! important(可惜這只是兼容CSS3)

0

如果你能確保在頁面中<head>加載包含:

<base target="_blank" /> 

然後所有的鏈接將在新窗口中打開。如果您不能確定這些頁面包含<head>中的頁面,那麼可以通過服務器端HTTP請求下載頁面數據,並在將頁面嵌入到框中之前手動添加該標籤。如果你不想做任何服務器端的工作,那麼你可以做它的客戶端。這裏有一個如何可以做一個簡化版本:

$.get("http://exampleurl.com/", function (data) { 
    var pos = data.indexOf("<head>"); 
    if(pos == -1) { 
     //pretty impossible 
     return; 
    } 
    data = data.substr(0, pos + 5) + '<base target="_blank" />' + data.substr(pos + 6, data.length - (pos + 6)); 
    //display data 
}); 
+1

「我們不能改變他們的內容」 :-( – 2012-08-14 13:48:15

0

隨着jQuery的.load()你需要提取您的網頁上的所有JS代碼,並使其瞄準這一部分,因爲它只會加載DOM元素。這有點棘手,但改變了一些事情和路徑後,你可以得到它的工作。

另一個,也許更簡單的方法,但如果你是在同一個域將只工作

$("#iFrame").contents().find("a").on("click",function(e) 
{ 
    e.preventDefault(); 
    // then use the href to virtualy create a link click event :-) 
}); 
相關問題