2012-05-22 33 views
2

工作,我有一个网站,它可以添加到iPhone/iPad的主屏幕上的图标(如所有网站都可以)。 点击图标时,网站以全屏模式显示(yay)。 为了防止本网站上的所有链接在Safari浏览器中打开,从而远离全屏模式,我重写了所有html锚点的点击事件。 这很好,但不是在.NET的linkbuttons,可能是因为他们需要做回发。获取.NET了LinkBut​​ton到iOS中的Web应用程序

这是我的代码:

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”(这了LinkBut​​ton做的),或者如果它们包含“的JavaScript”(这是与例如onclick ='xxx()')的链接。 虽然这不起作用。用Linkbutton创建的链接没有响应,我不知道为什么。

任何帮助都非常感谢。 感谢

回答

4

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

首先,它不只是了LinkBut​​ton,这一切,使得回传与JavaScript。它可能是一个autopostback = true的下拉列表,与ASP.NET复选框等一样。 =一个巨大的问题..

首先,我想通了,用户代理不同的iPhone/iPad的,当你去全屏。 第一个是Safari,第二个是全屏“app”。

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方法(或者说你的BasePage的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"; 
} 

这将使得浏览器看起来像IE6到.NET,这将让一切完美的作品。 抬头:如果您在代码中的任何位置检测到旧浏览器(例如IE 6)。确保它在此解决方法之后仍然有效。我不得不添加一个额外的if语句,以便将iOS设备从重定向到我的“你老了的浏览器页面”。

+0

如果你想打开全屏模式,而不是Safari浏览器链接,你还是要用我的代码片段从这个问题,它的工作原理没有改变。把它放在document.ready中。 – Andreas

+0

iOS 6用户报告** iPod报告为iPhone **: - 将iOS用户代理安装为iOS 6上的Web应用程序:Mozilla/5.0(iPhone; CPU iPhone OS 6_0,如Mac OS X)AppleWebKit/536.26(KHTML ,例如Gecko)移动/ 10A5376e **然而,作为在Safari在同一设备上:**的Mozilla/5.0(iPod的; CPU iPhone OS 6_0,例如Mac OS X)为AppleWebKit/536.26(KHTML,例如Gecko)版本/ 6.0移动/ 10A5376e Safari浏览器/ 8536.25 – Zymotik