IE 不会在不受支持的代码之后解析任何 JS
IE does not parse any JS after unsupported code?
我想使用某些JS代码,但只能根据浏览器是否支持@supports(CSS)和CSS.supports()(JS)属性/函数。
现在,Internet Explorer 不支持 CSS.supports() 或 @supports。这很好 - 这个想法是构建JS代码,这样,如果浏览器不支持它们中的任何一个,那么它就会回退到工作版本。
这在所有其他浏览器上都可以完美运行,即使是那些不支持@supports/CSS.supports()的浏览器。
但是在IE中,它解析JS代码一直到第一次提到CSS.supports(),然后它完全中断并且之后不解析单个字符。
我正在使用IE 11,这是我正在使用的JS代码(我也在使用jQuery):
$(function() {
var port = $(window);
var container = $('html, body');
if( !CSS.supports("-webkit-overflow-scrolling", "touch") & CSS.supports("perspective", "1px")) {
var port = $('.prllx');
var container = $('.prllx');
};
// OTHER CODE GOES HERE
});
但是,正如我所说,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不是特别流利,所以我可能在这里错过了一些非常简单的东西 - 或者它实际上可能是一个错误,在这种情况下,我该如何解决它?如果是IE,如何检查浏览器是否支持CSS.supports()而不破坏整个代码?
提前非常感谢!
引用函数的 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
是否存在,如果是,它是否有一个supports
这是一个函数:
$(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
});
某些主机提供的函数报告typeof
不正确。在这种情况下,您可能需要将上述=== "function"
更改为 !== "undefined"
。这是一个较弱的保护措施,因为并非所有未定义的东西都是可调用的,但有时主机提供的函数不会报告"function"
应有的情况。
旁注:JavaScript 中的逻辑"and"运算符是 &&
(如上所述),而不是&
。&
是按位"and"运算符(将其操作数强制为 32 位整数,并在位级别将它们组合在一起)。它之所以重要,主要是因为&&
短路,这意味着如果它的左操作数是假的(例如,typeof CSS === "object"
不是真的),它根本不计算它的右操作数,所以我们可以安全地做一些假设左手操作数是真实的(比如查看CSS
的support
属性)。
旁注 2:不要在附加到控制流语句的块末尾放置;
。这是无害的,但毫无意义。
- 匹配点之后的任何字符,直到下一个点或行尾
- 可以'在使用Javascript/AjaxMVC之后,不会返回到任何视图
- 任何匹配模式的方法,要么在某个字符之前,要么在某个字符之后
- IE 不会在不受支持的代码之后解析任何 JS
- 使用 javascript / jquery 检查 URL 在第二个“/”之后是否有任何内容
- Reg ex 表示特定字符之后和其他字符之间的任何内容
- jquery .each 函数之后不执行任何代码
- Javascript的window.open函数在ajax请求之后避免任何弹出窗口阻止程序
- 如何使此音频文件仅在列出的时间播放,而不是之后的任何时间播放
- jQuery 模式对话框在刷新后的第一页上工作正常,但在此之后的任何其他页面上都无法正常工作,除非刷新
- JavaScript在CSS3动画之后不显示任何内容
- 在javascript中,在函数名被指向其他地方之后,是否有任何方法可以访问该未命名的函数
- 是否有事件在加载DOM之后触发,但在任何外部资产(如图像、样式、iframe等)之前触发?
- 在加载HTML之后立即将链接加粗,并且不发生任何事件
- 在JakeJS中任务完成之前和之后是否有任何事件来运行某些东西?
- 在javascript中添加reg exp来确定url是否在/之后有任何字符
- 在任何操作之后禁用Struts 1.2中的按钮
- 在javascript中查找字符串之前或之后没有任何字母的数字
- 正则表达式如何选择“.”之后的任何字符
- 在IE的一些JS中,Jquery代码在开始时不工作,但在刷新页面2-3次之后.任何想法