2014-10-06 61 views
2

我正在研究一个包含JavaScript的ASP.NET应用程序,以动态地启用或禁用页面上的验证器。在ASP.NET中,应用程序提供了一个Web资源,该资源包含用于此目的的JavaScript函数,例如ValidatorEnable()。当我在Mac上的Safari上运行我们的应用程序时,出现无法找到ValidatorEnable的错误。这是我们在jQuery(document).ready()回调函数中调用的函数,所以期望所有资源都可用。在调试器中检查显示资源从未交付给客户端浏览器。ReferenceError:无法找到变量:Safari中的ValidatorEnable

有没有人见过这样的事情?在Windows上的IE,Chrome或Firefox上不会发生此问题,在Mac上的Chrome或Firefox上也不会发生此问题。 Safari似乎是没有正确接收或处理ASP.NET JavaScript验证器功能的。

在此先感谢!

+0

我们刚刚在mac或iOS上发现了与safari相同的错误。我们是一个使用vs2005构建的老式asp.net网站。谢谢,吉姆, – 2014-10-15 02:33:29

+0

。我们也是用VS2005构建的 – 2014-10-15 21:23:06

回答

5

我已经发布了关于ASP.NET 2.0浏览器识别功能的blog post。基本上,从7.1开始,浏览器版本字符串中出现了碰撞。 Asp.Net相信你正在运行一个不支持最新的javascript的Safari浏览器的老版本。通过更改web.config的<browserCaps>元素,可以匹配较新的版本并分配正确的功能。

<configuration> 
 
    <system.web>  
 
    <browserCaps>  
 
     <filter> 
 
     <case match="AppleWebKit/600">EcmaScriptVersion = 1.5   
 
      supportsCallback = true   
 
     </case>  
 
     <case match="AppleWebKit/601">EcmaScriptVersion = 1.5   
 
      supportsCallback = true   
 
     </case>  
 
     <case match="AppleWebKit/602">EcmaScriptVersion = 1.5   
 
      supportsCallback = true   
 
     </case>  
 
     <!-- Speculative futureproofing could do this?    
 
     <case match="AppleWebKit/603">EcmaScriptVersion = 1.5   
 
      supportsCallback = true   
 
     </case>  
 
     <case match="AppleWebKit/610">EcmaScriptVersion = 1.5   
 
      supportsCallback = true   
 
     </case>  
 
     <case match="AppleWebKit/650">EcmaScriptVersion = 1.5   
 
      supportsCallback = true   
 
     </case>  
 
     --> 
 
     </filter>  
 
    </browserCaps> 
 
    </system.web> 
 
</configuration>

other methods of fixing it

+0

谢谢,德鲁。如果我的web.config在中没有元素,那么这是否是预期的?添加这只是扩展/更正内置的浏览器检测? – 2014-10-15 21:26:49

+0

@DavidWhiteman您可以添加元素。它取决于是否存在于web.config文件中的实现。据我所知,通过Visual Studio创建新的Web.Config时不包括它。根据你正在工作的框架,作者可能会或可能不会将它添加到他们的基础Web.Config中。 – DrewDouglas 2014-11-10 20:11:30

+0

单挑:对于Safari现在标识为“AppleWebKit/601”的iOS 9不适用。 – Dai 2016-01-22 07:50:23

相关问题