2012-06-28 252 views
3

我在看我正在處理的Phonegap 1.3.0應用程序中似乎是個很小的問題。它適用於Android設備。Android Phonegap - 在外部瀏覽器中打開iframe鏈接而不是Phonegap WebView

這個問題來自於我試圖整合到我的應用中的廣告。我試圖使用Leadbolt的無SDK提供牆以及他們的橫幅廣告。

我在我的應用程序中,在隱藏的DIV內部的iframe中加載提議牆,然後在需要時顯示它 - 此部分工作良好。

當我點擊優惠信息牆上的某個鏈接時,問題出現了:不是在新的外部/本機瀏覽器中啓動點擊的URL,而是在iframe中打開該鏈接。當有人點擊橫幅廣告時,也會發生同樣的情況,不過這些廣告是通過將廣告插入到您希望廣告展示的位置而不是通過iframe進行整合的。 (也許腳本注入一個iframe,不知道,最終行爲是一樣的)

我現在要做的是在Java中實現一種方法來捕獲任何點擊,並且如果鏈接是打開一個新的瀏覽器不是相對的/本地的 - 即如果它以「http」,「https」或「市場」協議爲前綴

這裏存在真正的問題 - 我唯一的經驗是用Java處理Phoengap: (

我一直在閱讀和測試東西,但最後我必須求助於那些比我更懂Java編程知識的人

這是我到目前爲止已經嘗試:

package com.phonegap.my_great_app; 

import android.os.Bundle; 
import android.webkit.WebView; 
import com.phonegap.*; 

public class MyGreatApp extends DroidGap { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     super.loadUrl("file:///android_asset/www/index.html"); 


     /* Intercept clicked links, and open external URLs in external browser */ 
     public boolean shouldOverrideUrlLoading(DroidGap super, String url) { 
      if (url != null && url.startsWith("market://") || url.startsWith("http://") || url.startsWith("https://")) { 

       /* Open new WebView or external browser with URL */ 
       /* Do it here */ 
       Uri uri = Uri.parse(url); 
       Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
       startActivity(intent); 

      } else { 

       /* Do nothing, it's relative URL from my app */ 
       return false; 

      } 
     } 

    } 
} 

我相信這個代碼是可笑的錯誤,但希望它能夠說明什麼,我想在這裏實現。說實話,我不知道如果shouldOverrideUrlLoading()甚至是正確的方法來調用這個問題!

我會非常感謝您提供的任何建議或代碼示例!謝謝:)

編輯:只是要清楚 - 我不能改變iframe源代碼,所以javascript或更改鏈接目標不是一個選項,由於XSS問題。

回答

1

您可以在默認瀏覽器中打開外部鏈接,而不是在phonegap應用程序中打開。這可以通過兩種方式輕鬆完成。

一種是通過使用PhoneGap的medthod這樣,

navigator.app.loadUrl('http://stackoverflow.com'); 
/*NOTE : In some phonegap versions it does not works*/ 

另一種方法是使用jQuery Mobile的,你可以這樣做,

<a href="http://www.youtube.com/user/mychannel" class="ui-link" rel="external" target="_blank" title="My YouTube Channel">YouTube Channel</a> 

這就是所有。

+1

嘿,這將工作的偉大 - 但我的iframe的內容屬於Leadbolt,不是我 - 所以XSS安全問題將阻止任何客戶端解決方案...... 我有兩個選擇我看到它的方式 - 解決這個問題在Java中的行爲,或讓Leadbolt改變他們的源代碼。我認爲第一個選項更可行,謝謝你的努力:) – delta9

+0

@ delta9你有沒有想過這個?我有一個與亞馬遜產品鏈接類似的問題 – poornerd

相關問題