2012-06-28 251 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

相关问题