phonegap在浏览器中打开链接

ahs*_*ali 114 html5 cordova

<a target="_blank" data-rel="external" href="http://www.kidzout.com">www.kidzout.com</a>
Run Code Online (Sandbox Code Playgroud)

嘿专家我正在使用phonegap 2.9.0,我正在使用上面的代码在浏览器中打开链接,但它在同一个应用程序中打开它......如何打开它的Safari浏览器?

它在同一个应用程序中打开网站,然后我无法回到应用程序,所以我需要删除该应用程序并再次安装.....

fre*_*osh 219

作为建议类似的问题,使用JavaScript来调用window.open与target设置为参数_system,按照该InAppBrowser文档:

<a href="#" onclick="window.open('http://www.kidzout.com', '_system'); return false;">www.kidzout.com</a>
Run Code Online (Sandbox Code Playgroud)

这应该有效,但更好,更灵活的解决方案是截取所有链接的click事件,并window.open使用从链接属性读取的参数调用.

请记住,您必须安装InAppBrowser插件才能工作:

cordova plugin add cordova-plugin-inappbrowser
Run Code Online (Sandbox Code Playgroud)

  • 我有同样的问题..解决方案不工作:(它打开就像一个常规链接(在Android上) (7认同)
  • 是的我也尝试过,并按照你分享的链接,谢谢你的帮助,但问题仍然存在,该网站仍然在应用程序中打开...... :( (6认同)
  • 是的,我也在cordova 1.7.0中使用相同的目标="_ blank",但现在我正在使用2.9.0并且它让我烦恼,你的sujjestion以及没有工作...... :( (3认同)
  • 请记住,您必须安装InAppBrowser插件才能使用此说明,请访问:http://cordova.apache.org/docs/en/3.0.0/cordova_inappbrowser_inappbrowser.md.html#InAppBrowser (3认同)

小智 27

<a onclick="navigator.app.loadUrl('https://google.com/', { openExternal:true });">Link</a>
Run Code Online (Sandbox Code Playgroud)

适用于android和PG 3.0

  • 适用于Android 4.4.2和Cordova 3.3.0的我.但不适用于iOS 6.1. (2认同)

krz*_*chu 27

正如其他帖子所述,您可以为不同的平台选择两种不同的选项.我所做的是:

document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() {

    // Mock device.platform property if not available
    if (!window.device) {
        window.device = { platform: 'Browser' };
    }

    handleExternalURLs();
}

function handleExternalURLs() {
    // Handle click events for all external URLs
    if (device.platform.toUpperCase() === 'ANDROID') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            navigator.app.loadUrl(url, { openExternal: true });
            e.preventDefault();
        });
    }
    else if (device.platform.toUpperCase() === 'IOS') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            window.open(url, '_system');
            e.preventDefault();
        });
    }
    else {
        // Leave standard behaviour
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到我正在检查设备平台,并根据我使用不同的方法.如果是标准浏览器,我会留下标准行为.从现在开始,该解决方案将在Android,iOS和浏览器中正常运行,而HTML页面将不会更改,因此它可以将URL表示为标准锚点

<a href="http://stackoverflow.com">
Run Code Online (Sandbox Code Playgroud)

该解决方案需要InAppBrowser和Device插件


Has*_*que 21

在android和iphone中有两种不同的方式来打开URL.

对于IOS使用以下代码.

window.open("http://google.com", '_system');
Run Code Online (Sandbox Code Playgroud)

并为Android OS使用以下代码.

navigator.app.loadUrl("http://google.com", {openExternal : true});
Run Code Online (Sandbox Code Playgroud)


myt*_*her 10

最后这篇文章帮助我在iOS上:http://www.excellentwebworld.com/phonegap-open-a-link-in-safari-or-external-browser/.

打开"CDVwebviewDelegate.m"文件并搜索"shouldStartLoadWithRequest",然后将此代码添加到函数的开头:

if([[NSString stringWithFormat:@"%@",request.URL] rangeOfString:@"file"].location== NSNotFound) {
    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

虽然使用navigator.app.loadUrl("http://google.com", {openExternal : true});Android是可以的.

通过Cordova 3.3.0.


boz*_*doz 9

这些答案都不足以明确在每个平台中打开外部链接.根据inAppBrowser文档:

安装

cordova plugin add cordova-plugin-inappbrowser
Run Code Online (Sandbox Code Playgroud)

覆盖window.open(可选,但为简单起见,建议使用)

window.open = cordova.InAppBrowser.open;
Run Code Online (Sandbox Code Playgroud)

如果不覆盖window.open,则将使用本机window.open函数,并且不能期望跨平台获得相同的结果.

使用它在默认浏览器中打开链接

window.open(your_href_value, '_system');
Run Code Online (Sandbox Code Playgroud)

请注意,inAppBrowser的目标(这是插件名称建议使用的目标)是'_blank',而不是'_system'.


如果没有上述步骤,我无法在默认的浏览器应用程序跨平台中获取打开的链接.

额外的功劳

这是链接的示例(实时)点击处理程序:

document.addEventListener('click', function (e) {
    if (e.target.tagName === 'A' &&
        e.target.href.match(/^https?:\/\//)) {
        e.preventDefault();
        window.open(e.target.href, '_system');
    }
});
Run Code Online (Sandbox Code Playgroud)


小智 7

如果您碰巧有jQuery,可以截取链接上的点击,如下所示:

$(document).on('click', 'a', function (event) {
    event.preventDefault();
    window.open($(this).attr('href'), '_system');
    return false;
});
Run Code Online (Sandbox Code Playgroud)

这样您就不必修改html中的链接,这可以节省大量时间.我已经使用委托设置了这个,这就是为什么你看到它被绑定到文档对象,'a'标记作为第二个参数.这样,无论何时添加标签,都将处理所有'a'标签.

当然,您仍然需要安装InAppBrowser插件:

cordova plugin add org.apache.cordova.inappbrowser
Run Code Online (Sandbox Code Playgroud)