5

背景: 在 Android 上运行的 Cordova phonegap 2.2 应用程序允许监听 backbutton 事件

document.addEventListener("backbutton", function(e){ history.back();}

google maps api V3 创建的地图带有链接到左下角的 Google 地图网页的 Google 徽标和右下角的可点击许可链接。徽标或服务条款链接没有特定的 ID/选择器。

问题 当单击其中一个链接时,网页将重定向到具有以下内容的 Google 网页:target:_blank,然后该网站在与 Cordava 应用程序相同的窗口中打开,但由于网页包含自己的 Javascript,后退按钮功能丢失。

是否可以在加载网页时注入一些代码?

一种解决方案可能是在外部打开链接:

navigator.app.loadUrl([href here], { openExternal:true } );

但话又说回来,仍然存在缺少选择器的问题。

更新:在许可证页面或 Google 地图中单击按钮时,我在 logcat 中收到以下错误消息:11-13 16:20:30.500: E/Web Console(31508): Uncaught ReferenceError: cordova is not defined:1

4

3 回答 3

2

.live() 已在 jQuery v1.9 中删除,并且在 Zepto v1.0rc1 中已弃用,因此这是 kvaale 答案的修订版,它应该适用于最新的框架。

此版本还使用PhoneGap/Cordova 的InAppBrowser 代码,使您能够在InAppBrowser(使用'_blank')或系统Web 浏览器(使用'_system')中打开链接。

function directUrlToExternalBrowser(urlPattern){
    var pattern = "a[href^='"+urlPattern+"']";      // detect all urls starting with urlPattern

    $(document).on('click', pattern, function(e){
        e.preventDefault();
        var ref = window.open($(pattern).attr("href"), '_system', '');      // '_system' will open the system web browser, '_blank' will open the InAppBrowser
    });
}

然后将以下代码放入您的$(document).ready()函数中...

directUrlToExternalBrowser("http://maps.google.com/maps");
directUrlToExternalBrowser("http://www.google.com/intl");

如果您想检测所有“a href”链接(不仅仅是 Google 地图的链接),请改用以下代码...

directUrlToExternalBrowser("http://");  
directUrlToExternalBrowser("https://");      
于 2013-02-24T08:10:02.197 回答
1
$(document).on('click', '#map a[target="_blank"]', function(e){
    e.preventDefault();
    var url = $(this).attr('href');

    if( /Android/.test(navigator.appVersion) ){
        navigator.app.loadUrl(url, { openExternal:true });
    }else{
        window.open(url, '_system');
    }
});

#map- 谷歌地图容器

适用于 android 和 ios。

于 2013-06-04T07:16:45.590 回答
0

这是与谷歌地图链接相交的一种方法。

假设您有可用的 jquery,您可以在脚本中包含此方法:

function directUrlToExternalBrowser(urlPattern) {
  var pattern = "a[href^='"+urlPattern+"']";//all urls startting with urlPattern
  $(pattern).live('click', function(e){
      e.preventDefault();
      navigator.app.loadUrl($(pattern).attr("href"), {openExternal: true});
  });
}

然后,您可以通过以下几行将点击定向到 phonegap api:

directUrlToExternalBrowser("http://maps.google.com/maps");
directUrlToExternalBrowser("http://www.google.com/intl");
于 2012-12-13T23:15:26.347 回答