如何强制在浏览器而不是应用程序中打开外部链接?

时间:2019-12-13 08:49:12

标签: javascript reactjs mobile

我的移动网站提供外部链接,例如YouTube。 根据浏览器的不同,它会在网络浏览器或相应的应用程序上打开。

但是我想强制在当前浏览器而不是应用程序中打开链接。

示例-当我打开“ https://m.youtube.com”之类的链接时,Chrome移动浏览器始终会打开已安装的Youtube App;

  • 我现在正在使用React。

2 个答案:

答案 0 :(得分:0)

这个流行于2011年的GitHub Gist(在底部附近的注释中添加了2018年的更新代码)是用于将HTML文档加载到WebViews中的,但似乎是您想要的:https://gist.github.com/kylebarrow/1042026

使用的技术是拦截超链接的点击,取消默认导航(这将导致显示“在YouTube中打开?”提示),然后通过设置window.document.location.assign进行导航(不是< / strong>与window.location相同)。我不是Mobile Safari专家,但是我怀疑如果设置了document.location而不是window.location,Mobile Safari不会提示在应用中打开。

将此代码放入脚本函数中,该脚本函数将在文档DOM加载后运行(即DOMContentLoaded或在呈现的HTML末尾的内联脚本中运行)。

    const isMobileSafari = ( ( ua ) => ua.match(/iPad/) || ua.match(/iPhone/) )( window.navigator.userAgent );
    if( isMobileSafari ) {
        const hyperlinks = document.querySelectorAll( 'a:link' );
        for( let anchor of hyperlinks ) anchor.addEventListener( 'click', onHyperlinkClickPreventAppOpen );
    }

    function onHyperlinkClickPreventAppOpen( ev ) {
        const el = ev.target;
        if( el.href && ( el.href.startsWith( "http:" ) || ( el.href.startsWith( "https:" ) ) {
            ev.preventDefault();
            window.document.location.assign( el.href );
        }
    }

如果要拦截在文档加载后添加的超链接中的点击,请执行以下操作:

document.addEventListener( 'click', onDynamicHyperlinkClickPreventAppOpen );

function onDynamicHyperlinkClickPreventAppOpen ( ev ) {
    const el = ev.target;
    el = el.closest( 'a:link' ); // In case the 'click' event was raised by a descendant of an <a>
    if( !el ) return;

    const fakeEvent = { target: el, preventDefault: ev.preventDefault };
    onHyperlinkClickPreventAppOpen( fakeEvent );
}

答案 1 :(得分:0)

启动新的快捷方式: 目标:“ C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe” https://news.sky.com/ 在所有浏览器上都可以轻松完成工作,例如Ia是老式的html ....:)