2014-09-24 54 views
0

我正在開發一個Phonegap應用程序。我的一個網頁包含來自Facebook的iframe以顯示來自Facebook頁面的帖子。到現在爲止還挺好。在Android上,iframe中的鏈接不起作用。當我點擊它們時沒有任何反應。我還沒有確認是否在iOS上出現同樣的問題。有誰知道這是爲什麼或如何解決它?爲什麼手機應用程序中的iframe中的鏈接不工作?

爲了澄清我想要什麼樣的行爲:從Facebook的iframe內的所有環節應該在我的應用程序之外的外部瀏覽器中打開。現在,什麼都沒有發生。

我測試:我創建了一個鏈接一個簡單的HTML文件。我iframed該HTML文件。該鏈接不起作用。當直接放入鏈接(而不是通過iframe)時,鏈接起作用。

明顯,但請注意:我無法從Facebook未來的iframe更改HTML。

回答

1

我仍然不知道什麼是您的實際REQ。但我正在使用iframe在cordova 3.5項目中加載外部頁面,並將頁面加載到正確的位置。

/*for devcontent to remove the default jquery mobile padding*/ 
#devContent{ 
    padding: 0em !important; 
} 

我也有一個要求:

<iframe src="http://google.com/" frameborder="0" style="width: 100%; height: 100%;"></iframe> 

我碰到我在其中加載的iframe我取出填充一些填充問題,圍繞它的頁jQuery Mobile的放我想是這樣的DIV來了當拍了拍移動系統瀏覽器中打開鏈接,這是我使用的SO回答來調整本地的iOS代碼:

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSURL *url = [request URL]; 
    NSString *str = url.absoluteString; 
    NSRange range = [str rangeOfString:@"http://"]; 
    NSRange range1 = [str rangeOfString:@"https://"]; 

    if (range.location != NSNotFound || range1.location != NSNotFound) { 
     [[UIApplication sharedApplication] openURL:url]; 
     return NO; 
    }else { 
     return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; 
} 

我還沒有找到一個解決方案,打開系統中的瀏覽鏈接當用戶點擊時在Android上運行。鏈接不斷在應用程序內部打開。

讓我知道如何解決。 乾杯。

+0

我設法根據您的代碼段攔截iOS上的點擊。這部分完成了。現在我仍然需要在Android上找出這一點。看起來它在Android上更加困難,因爲iframe中的鏈接似乎根本不起作用。我會更新,如果我發現更多。 – Emiam 2014-09-25 15:49:34

+0

很高興幫助。我仍然無法在用戶點擊的Android系統瀏覽器中打開鏈接。如果您嘗試使用電子郵件鏈接,那麼只需使用普通html中使用的mailto即可,這對打開本機電子郵件應用程序非常有用。另外,當我試圖做到這一點時,iframe加載其他網站與我的代碼,但不是Facebook的所有權利。 – allwynmasc 2014-09-26 08:57:41

+0

@Emiam我已經使用相同的方法來打開Android上的iframe中的鏈接,它的工作。你面臨的確切問題是什麼?我最後一次從你的評論中錯過了這一點。 – allwynmasc 2014-10-11 05:11:48

2

我經歷了從科爾多瓦版本CLI-6.0.0開始同樣的問題,我解決了「的onclick」事件設置document.location.href

更換每一個環節進入的iframe編程這是我把代碼進入科爾多瓦部件:

fix_link = function() 
{ 
    $("a").each(function() { 
     $(this).attr("dest_url", $(this).attr("href")) 
     $(this).removeAttr("href") 
     $(this).click(function() { 
      document.location.href = $(this).attr("dest_url"); 
     }) 
    }); 
} 

var iframe = document.createElement('iframe'); 
iframe.onload = function() { 
    document.framewrap.eval("fix_link_func = " + String(fix_link)); 
    document.framewrap.eval("fix_link_func();"); 
}; 
iframe.src = 'http://www.yoursite.com'; 
iframe.id = "framewrap"; 
iframe.name = "framewrap"; 
document.body.appendChild(iframe); 

讓我知道你是否找到更好的解決方案!

+0

我現在沒有時間去嘗試,但如果它有效,它肯定會比爲iOS和Android編寫本機代碼來攔截點擊更好。甚至可以使用「data-iframe-fix-links」這樣的數據標籤創建一個簡單的鏈接,然後腳本可以將所有這些帶有數據標籤的鏈接重新制作成帶有修復鏈接的iframe。我會在我的下一個項目中嘗試。 – Emiam 2016-06-09 09:10:12

相關問題