Javascript .Focus 导致 safari 8.1.3 仅在 iPad 上崩溃

Posted

技术标签:

【中文标题】Javascript .Focus 导致 safari 8.1.3 仅在 iPad 上崩溃【英文标题】:Javascript .Focus causing safari 8.1.3 to crash only on IPad 【发布时间】:2015-03-07 15:13:57 【问题描述】:

Web 应用技术:Asp.Net 4.5

以下 javascript 的 sn-p 会导致 Safari(更新 8.1.3)崩溃。但是它在以前的 safari 版本上运行良好。该代码只是在服务器请求后将焦点重置为控制。注意:这在 Chrome、IE 和 FF 中运行良好。

var TFoc_Id
function EndRequestHandler() 
    try 
        //Maintain vertical scroll pos in panel
        var panel = document.getElementById("ContentPlaceHolder1_InputPanel1");
            if (panel != null) 
                if (typeof yPos == "number")  panel.scrollTop = yPos; 
            
        //Reset focus to control after server request
        if (TFoc_Id != null) 
            var id = TFoc_Id;
            //Below causes Safari crash
            if (id.indexOf("ContentPlaceHolder1_") != -1) 
               document.getElementById(TFoc_Id).focus();
            
        
      catch (err) 
     

【问题讨论】:

这可能不是对焦点的调用,而是其他一些东西,它看起来确实是一段奇怪的代码,并且由于没有使用参数,您可能删除了很多? @adeneo 我已将代码块更新为显示所有代码并删除了未使用的 args。 【参考方案1】:

我添加了以下代码来绕过仅适用于 ipad 的 .focus。这是一个临时的快速修复。

        function EndRequestHandler(sender, args) 
        try 
            var panel = document.getElementById("ContentPlaceHolder1_InputPanel1");
            if (panel != null) 
                if (typeof yPos == "number")  panel.scrollTop = yPos; 
            

            if (MobileInfo != "iPad") 
                if (TFoc_Id != null) 
                    var id = TFoc_Id;
                    if (id.indexOf("ContentPlaceHolder1_") != -1) 
                        document.getElementById(TFoc_Id).focus();
                    
                
            

         catch (err) 
        
    

    var MobileInfo

    window.onload = function () 
        MobileInfo = get_mobile_info();
    

    function get_mobile_info() 
        var retVal
        retVal = "";
        if (navigator.userAgent.match(/android/i))  retVal = "Android" ;
        if (navigator.userAgent.match(/webOS/i))  retVal = "webOS" ;
        if (navigator.userAgent.match(/iPhone/i))  retVal = "iPhone" ;
        if (navigator.userAgent.match(/iPad/i))  retVal = "iPad" ;
        if (navigator.userAgent.match(/iPod/i))  retVal = "iPod" ;
        if (navigator.userAgent.match(/BlackBerry/i))  retVal = "BlackBerry" ;
        if (navigator.userAgent.match(/Windows Phone/i))  retVal = "Windows Phone" ;
        return retVal
    

【讨论】:

以上是关于Javascript .Focus 导致 safari 8.1.3 仅在 iPad 上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

javascript表单编程

调用 focus 方法会导致 onblur 无休止地触发

javascript 轨道focus.js

JavaScript中的Focus OnLoad

javascript jquery.keyboard-focus.js

javascript delegation_blur_focus.js