一些忽略EventListener的链接

时间:2015-03-03 09:54:41

标签: javascript iphone-standalone-web-app iphone-web-app

更新

用户Quentin帮助我解决了这个问题。灯箱在函数中有一个event.stopPropagation();,阻止事件监视器冒泡。删除后,链接正常工作。

我在honyovk的添加中使用了这个评论,用更优雅的函数替换了stopPropagation:https://stackoverflow.com/a/1089622/3461722


问题

我有一个适用于iOS的webapp,我在其中使用EventListener来阻止在Safari中打开链接。这对于99%的链接都是完美无缺的,但是在Safari中仍然会打开一些特定的链接,原因我不知道。

这是我的Javascript:

// Mobile Safari in standalone mode
if(("standalone" in window.navigator) && window.navigator.standalone){

    // If you want to prevent remote links in standalone web apps opening Mobile Safari, change 'remotes' to true
    var noddy, remotes = false;

    document.addEventListener('click', function(event) {

        noddy = event.target;

        // Bubble up until we hit link or top HTML element. Warning: BODY element is not compulsory so better to stop on HTML
        while(noddy.nodeName !== "A" && noddy.nodeName !== "HTML") {
            noddy = noddy.parentNode;
        }

        if('href' in noddy && noddy.href.indexOf('http') !== -1 && (noddy.href.indexOf(document.location.host) !== -1 || remotes))
        {
            event.preventDefault();
            document.location.href = noddy.href;
        }

    },false);
}

无法在webapp中打开的链接没有什么特别之处,页面上的其他链接也没有问题。一个不正常工作的链接示例:

<a href="upgrademine.php?m=green" class="button bgreen">Buy</a>

此链接在灯箱中打开,但在其他页面上我也在灯箱中有类似的链接,它们工作正常。我有几个弹出窗口大致相同的链接,只有“绿色”不同,有些还有额外的“&amp; time = 1”,它们都无法在webapp中打开。

是否有人可以查找此代码的错误?

0 个答案:

没有答案