当前位置: 首页 > 面试题库 >

iOS 8 / Safari 8无法与ASP.NET AJAX扩展一起使用

锺离边浩
2023-03-14
问题内容

iOS 8推出后,我们的网站突然停止工作。从ASP.NET UpdatePanel内部进行的每个回发都将导致一个空白页。如果从Safari
8(在Mac上)将用户代理设置为“ Chrome”,它仍然可以工作。

我已经跟踪到,某些“ ScriptResource.axd”和“ WebResource.axd”文件根本没有加载。还会出现一个错误消息,提示“
Sys.WebForms”未定义(可能是由于缺少脚本文件)。

我们正在使用带有AJAX扩展1.0的ASP.NET 2.0(我知道,已经很过时了。但是以前可以工作,或者直到现在可以修复)。


问题答案:

注意此解决方案仅适用于.NET版本 <4.0

所以这是…

适用的UA: Mozilla / 5.0(Windows NT 6.2; WOW64)AppleWebKit /
537.36(KHTML,例如Gecko)Chrome / 29.0.1547.57 Safari / 537.36

UA 无法 正常工作: Mozilla / 5.0(Macintosh; Intel Mac OS X 10_9_5)AppleWebKit /
600.1.17(KHTML,例如Gecko)版本/7.1 Safari / 537.85.10

问题出在主要版本更改为AppleWebKit / 600上。ASP.NET AJAX无法正确识别新的Safari 8浏览器(也适用于iOS
8)。它认为不支持部分渲染。我在“ PageRequestManager.cs”的这些行中找到了它:

bool supportsPartialRendering = (browser.W3CDomVersion >= MinimumW3CDomVersion) && (browser.EcmaScriptVersion >= MinimumEcmaScriptVersion) && browser.SupportsCallback;

MinimumEcmaScriptVersion / MinimumW3CDomVersion都是1. Request.Browser给我以下结果:

W3CDomVersion = 1.0
EcmaScriptVersion = 1.0
SupportsCallback = false

即使“ EcmaScriptVersion”具有一个奇怪的值,问题也主要是由SupportsCallback beeing false引起的。

该错误位于ASP.NET附带的“ mozilla.browser”文件中(位于“ C:\ Windows \ Microsoft.NET”中的某个位置):

<browser id="Safari60" parentID="Safari">
  <identification>
    <capability name="appleWebTechnologyVersion" match="60" />
</identification>
<capture>
</capture>
<capabilities>
  <capability name="ecmascriptversion"       value="1.0" />
  </capabilities>
</browser>

<browser id="Safari85" parentID="Safari">
  <identification>
    <capability name="appleWebTechnologyVersion" match="85" />
  </identification>
  <capture>
  </capture>
  <capabilities>
    <capability name="ecmascriptversion"       value="1.4" />
  </capabilities>
</browser>

<browser id="Safari1Plus" parentID="Safari">
  <identification>
    <capability name="appleWebTechnologyVersion" match="\d\d\d" />
  </identification>
  <capture>
  </capture>
  <capabilities>
    <capability name="ecmascriptversion"       value="1.4" />
    <capability name="w3cdomversion"           value="1.0" />
    <capability name="supportsCallback"        value="true" />
  </capabilities>
</browser>

所有比“ Safari 85”都要新的东西都应该被最后的定义所抓住。但是由于正则表达式混乱,“ Safari 600”被错误地检测为“ Safari60”:

<capability name="appleWebTechnologyVersion" match="60" />

本来应该

<capability name="appleWebTechnologyVersion" match="60$" />

我通过将自定义文件“ App_Browsers \ safari.browser”添加到我的应用程序来解决此问题,该文件包含以下内容:

<browsers>
  <browser id="Safari60_bugfix" parentID="Safari60">
    <identification>
      <capability name="appleWebTechnologyVersion" match="^\d{3,}$" />  <!-- At least 3 digits -->
    </identification>

    <capabilities>
      <!-- Same as in "Safari1Plus" -->
      <capability name="ecmascriptversion" value="1.4" />
      <capability name="w3cdomversion" value="1.0" />
      <capability name="supportsCallback" value="true" />
     </capabilities>
  </browser>

  <browser id="Safari85_bugfix" parentID="Safari85">
    <identification>
      <capability name="appleWebTechnologyVersion" match="^\d{3,}$" />  <!-- At least 3 digits -->
    </identification>

    <capabilities>
      <!-- Same as in "Safari1Plus" -->
      <capability name="ecmascriptversion" value="1.4" />
      <capability name="w3cdomversion" value="1.0" />
      <capability name="supportsCallback" value="true" />
    </capabilities>
  </browser>
</browsers>


 类似资料:
  • 我目前正在使用Selenium运行Chrome的实例来测试网页。每次我的脚本运行,一个干净的Chrome实例启动(干净的扩展,书签,浏览历史,等等)。我想知道是否有可能运行我的脚本与Chrome扩展。我试着搜索一个Python示例,但是当我用谷歌搜索这个示例时,什么也没有找到。

  • 问题内容: 我已经通过使用ApacheCXF(v3.0.4)实现了JAX-WS客户端,并且一切正常,但是当我想在Java 8(jdk1.8.0_25)中使用安全连接(SSL / TLS)时出现了问题。 我在日志(-Djavax.net.debug = all)中看到以下异常: 经过depeer分析后,我发现问题是由于Java 8不会发送server_name(SNI),而Java 7却发送了ser

  • 我试图使用wsgen生成wsdl文件。如果我的webservice类扩展另一个类,我得到一个错误,但如果我删除扩展它的工作。这是错误消息: 另外,wsgen-完整版本: 请注意,我只有在使用Java8时才会出现这个问题。但是当我使用Java7和wsgen版本时,同样的代码可以工作: 下面是更多的细节以及如何复制它:我正在使用Java8,我有三个文件: basewebservice.java: 包w

  • 问题内容: 我的程序应该等待按下向左或向右箭头键,然后更改一个值,以便下次更新PaintComponent时,屏幕看起来有所不同。但是,运行该程序时,屏幕没有变化。 以下是变量声明: 这是主要的KeyListener声明: 这是用于绘画的方法: 当我运行该程序时,该程序会打印外壳,但是当我按箭头键时,屏幕上没有任何变化。 问题答案: 您需要先将关键侦听器添加到组件,然后才能调用它: 您还需要使组件

  • 问题内容: click事件可以正常运行,但是onmouseover事件不起作用。 问题答案: 您需要大写一些字母。