2

我有一个网站,可以作为图标添加到 iPhone/iPad 主屏幕(所有网站都可以)。点击图标时,网站会以全屏模式显示(耶)。为了防止该网站上的所有链接在 safari 中打开,从而脱离全屏模式,我将覆盖所有 html 锚点的点击事件。这很好用,但不适用于 .NET 链接按钮,可能是因为它们需要进行回发。

这是我的代码:

var iOS = (navigator.userAgent.match(/(iPad|iPhone|iPod)/i) ? true : false);
if (iOS) {
    $("a").click(function (event) {
        var href = $(this).attr("href");
        if (href.indexOf("doPostBack") == -1 && href.indexOf("javascript") == -1) {
            event.preventDefault();
            window.location = $(this).attr("href");
        }
    });
}

正如您所看到的,如果href 包含“doPostBack”(Linkbuttons 会这样做),或者如果它们包含“javascript”(这是用于例如 onclick='xxx()' 的链接),我会尝试阻止这种特殊行为。但这不起作用。使用 Linkbutton 创建的链接没有响应,我不知道为什么。

非常感谢任何帮助。谢谢

4

1 回答 1

4

好的。经过长时间的专门讨论这个问题后,我终于解决了这个问题。如果您只是想要解决方案,请跳到最后。

首先,它不仅仅是链接按钮,而是使用 javascript 进行回发的所有内容。它可以是 autopostback = true 的下拉列表,与 ASP.NET 复选框相同,等等。= 一个大问题..

首先,我发现全屏时 iPhone/iPad 的用户代理有所不同。第一个是 Safari,第二个是全屏“应用程序”。

Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3
Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9A405

所以。这里发生了什么事?嗯,.NET 的浏览器定义文件不能识别第二个用户代理,它默认为“Mozilla”,一个非常标准化和低级的浏览器定义,功能非常低。我尝试创建一个自定义浏览器文件,在其中定义了一个“新”浏览器,将用户代理与正则表达式匹配:如果它包含 iPhone/iPad/iPod - 告诉 .NET 这是一个 Safari 浏览器,而不是 Mozilla。不幸的是,我没有设法让它工作。既不将文件添加到 App_Browsers 文件夹,也不通过框架全局注册文件。

反正。我继续寻找解决方案,并找到了一个我修改了一下的解决方法。在您页面的 PreInit 方法(或者更确切地说是您的基本页面的 PreInit 方法)中执行以下操作:

protected void Page_PreInit(object sender, EventArgs e)
{
    if (Request.UserAgent != null && (Request.UserAgent.Contains("iPhone") || Request.UserAgent.Contains("iPad") || Request.UserAgent.Contains("iPod")))
        this.ClientTarget = "uplevel";
}

This will make the browser look like IE6 to .NET which will make everything works perfectly. A heads up: If you are detecting for old browsers (IE 6 for example) anywhere in your code. Make sure it still works after this workaround. I had to add an extra if statement to exclude iOS devices from beeing redirected to my "you-got-an-old-browser-page".

于 2012-05-29T21:31:14.943 回答