Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE在不支持的代码之后不解析任何JS?_Javascript_Css_Internet Explorer - Fatal编程技术网

Javascript IE在不支持的代码之后不解析任何JS?

Javascript IE在不支持的代码之后不解析任何JS?,javascript,css,internet-explorer,Javascript,Css,Internet Explorer,我想使用某些JS代码,但只根据浏览器是否支持@supports(CSS)和CSS.supports()(JS)属性/函数 现在,Internet Explorer不支持CSS.supports()或@supports。这很好——我们的想法是构建JS代码,这样,如果浏览器不支持这两个代码中的任何一个,那么它就会返回到工作版本 这在所有其他浏览器上都能完美地工作,即使是那些不支持@supports/CSS.supports()的浏览器 但是在IE中,它解析JS代码,直到第一次提到CSS.suppor

我想使用某些JS代码,但只根据浏览器是否支持@supports(CSS)和CSS.supports()(JS)属性/函数

现在,Internet Explorer不支持CSS.supports()或@supports。这很好——我们的想法是构建JS代码,这样,如果浏览器不支持这两个代码中的任何一个,那么它就会返回到工作版本

这在所有其他浏览器上都能完美地工作,即使是那些不支持@supports/CSS.supports()的浏览器

但是在IE中,它解析JS代码,直到第一次提到CSS.supports(),然后它完全中断,之后不解析任何字符

我正在使用IE 11,下面是我正在使用的JS代码(我也在使用jQuery):

然而,正如我所说的,IE在IF检查后不读取任何代码

然后,我试着编写一个测试代码,用一个更简单的例子看看会发生什么:

    var helloworld = !CSS.supports("-webkit-overflow-scrolling", "touch");
    $("#test").html(helloworld);            
    if (helloworld == true) {
        $("#test2").html("HELLO WORLD FROM WITHIN IF");         
    };
但是IE不会在第一行之后解析任何东西(我每隔一行插入$(“#div”).html(“HELLO WORLD”);行来查看IE在哪一点停止解析JS,而这实际上是在第一次提到CSS.supports之后发生的

我似乎无法理解这一点:在所有其他不支持CSS.supports()的浏览器中,IF(在我的第一个示例中)显然为false,变量保持不变。但它们在该实例之后继续解析剩余的代码,即使它们不/不能解析CSS.supports()因为他们不支持这个功能,但是IE完全停止解析

我不得不说,我对javascript不是特别熟练,所以我可能在这里遗漏了一些非常简单的东西——或者它实际上可能是一个bug,在这种情况下,我该如何处理它?如果是IE,我如何检查浏览器是否支持CSS.supports(),而不破坏整个代码


非常感谢!

任何没有
CSS
对象且
支持
属性引用函数的浏览器都会抛出异常,如下所示:

$(function() {
    var port = $(window);
    var container = $('html, body');

    // vv Exception on this line
    if( !CSS.supports("-webkit-overflow-scrolling", "touch") & CSS.supports("perspective", "1px")) {
        var port = $('.prllx');
        var container = $('.prllx');
    };

    // OTHER CODE GOES HERE
});
当在函数中抛出未处理的异常时,控制权会从函数中转移出去,并且不会在异常发生的地方运行任何代码。这不是IE的事情,而是JavaScript和大多数其他有异常的语言的工作方式

相反,设置一个防护装置,检查
CSS
是否存在,如果存在,它是否有
支持的
功能:

$(function() {
    var port = $(window);
    var container = $('html, body');

    if( typeof CSS === "object" &&
        typeof CSS.supports === "function" &&
        !CSS.supports("-webkit-overflow-scrolling", "touch") &&
        CSS.supports("perspective", "1px")) {
        var port = $('.prllx');
        var container = $('.prllx');
    }

    // OTHER CODE GOES HERE
});
某些主机提供的函数报告的
类型不正确。在这种情况下,您可能需要将上面的
==“function”
更改为
!==“undefined”
。这是一种较弱的保护,因为不是所有未定义的函数都可以调用,但有时主机提供的函数不报告
“function”
他们应该这样做


旁注:JavaScript中的逻辑“and”运算符是
&&
(如上所述),而不是
&
&
是按位的“and”运算符(将其操作数强制为32位整数,并在位级别组合它们)它之所以重要,主要是因为
&
短路,这意味着如果它的左侧操作数是假的(例如,
typeof CSS===“object”
不是真的),它根本不会计算它的右侧操作数,因此我们可以安全地做一些事情,假设左侧操作数是真的(例如查看
CSS
support
属性)


旁注2:您没有在附加到控制流语句的块结束后放置
。这是无害的,但毫无意义。

这现在在最新版本的Chrome(MacOSX)上不起作用。我将检查类型改为!==“未定义”像这样:抱歉,没有意识到输入我的消息-刚刚开始再次编辑我的回复:非常感谢!这很有效:
if(typeof CSS!=“undefined”&&typeof CSS.supports!=“undefined”)
现在它可以在所有以前的浏览器上运行,并且不会在IE上中断。您的解决方案在我的Chrome控制台中没有引发任何错误,但变量没有按预期进行更改。不过,将其更改为!==未定义效果非常好。可能CSS!==“未定义”的类型是不必要的,只有“typeof CSS.supports!==未定义”“足够了吗?@Laonikoss:啊,好吧。是的,有一小部分的可能性
typeof CSS.supports!==“undefined”
不是足够的防御(因为你要调用它,并且不是所有未定义的东西都可以调用),但是一些主机提供的对象和函数确实报告了错误的
typeof
(对于主机提供的函数,最常见的错误是
“object”
)。我已经将其折叠到了上面。对-但是考虑到它对于这个特定的函数运行得足够好,是否值得在IF(或嵌套它们)中添加额外的或参数来检查所有可能的
类型的
,或者
!=“未定义”
够了吗?太好了,谢谢!我也很感谢你的其他评论(例如关于
)。我只是从重用不同地方的二进制代码和二进制代码中学到了JS,所以我不太熟悉正确的语法!)
$(function() {
    var port = $(window);
    var container = $('html, body');

    if( typeof CSS === "object" &&
        typeof CSS.supports === "function" &&
        !CSS.supports("-webkit-overflow-scrolling", "touch") &&
        CSS.supports("perspective", "1px")) {
        var port = $('.prllx');
        var container = $('.prllx');
    }

    // OTHER CODE GOES HERE
});