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

Javascript 如何在浏览器中而不是应用程序中强制打开外部链接?,javascript,reactjs,mobile,Javascript,Reactjs,Mobile,我的移动网站提供像YouTube这样的外部链接。 根据浏览器的不同,它会在web浏览器或相应的应用程序上打开 但我想在当前浏览器中强制打开链接,而不是应用程序 示例-当我打开类似“”的链接时,Chrome移动浏览器始终打开已安装的Youtube应用程序 我现在正在使用React 这是2011年流行的GitHub指南(在底部附近的评论中添加了2018年的更新代码),用于加载到WebView中的HTML文档,但似乎是您想要的: 所使用的技术是拦截超链接单击,取消默认导航(这将导致出现“在YouTu

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

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

示例-当我打开类似“”的链接时,Chrome移动浏览器始终打开已安装的Youtube应用程序

  • 我现在正在使用React

这是2011年流行的GitHub指南(在底部附近的评论中添加了2018年的更新代码),用于加载到WebView中的HTML文档,但似乎是您想要的:

所使用的技术是拦截超链接单击,取消默认导航(这将导致出现“在YouTube中打开?”提示),然后通过设置
窗口.文档.位置.分配
(这与
窗口.位置
不同)。我不是移动Safari专家,但我怀疑如果设置了
document.location
,而不是
window.location
,则移动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 );
}

document.addEventListener('click',onDynamicHyperlinkClickPreventAppOpen);
动态超链接ClickPreventAppOpen(ev)的功能{
常数el=电动汽车目标;
el=el.closest('a:link');//如果'click'事件是由
如果(!el)返回;
const fakeEvent={target:el,preventDefault:ev.preventDefault};
在超链接上单击防止打开(fakeEvent);
}
启动新的快捷方式: 目标:“C:\ProgramFiles(x86)\Google\Chrome\Application\Chrome.exe”
Simple适用于所有浏览器,我是老式html…)

谢谢您回答我的问题。我试过你上面的建议,但不起作用。我在chrome浏览器而不是Safari浏览器上进行了测试。问题似乎在于网站的开发者如何做到这一点,而不是用户。