我写了一些在所有主流浏览器上都能正常运行的Javascript代码。当然,我通过创建一个指出用户使用哪种浏览器的函数,来确保Internet Explorer不会执行任何操作。
这是问题所在:即使我告诉IE不要执行代码,浏览器仍会读取我的所有Javascript,并且由于发现无法识别的内容,因此它会停止运行其他Javascript。
我唯一想做的就是创建一个函数,该函数将在用户使用IE时返回,但这似乎不起作用,因为我认为问题出在IE最初解析我的脚本而无法了解现代JS语法。
这是我的代码的简化版本:
class Section {
constructor(dom, startPosition, endPosition, backgroundPosition) {
this.dom = dom;
this.startPosition = startPosition;
this.endPosition = endPosition;
this.backgroundPosition = backgroundPosition;
}
}
function isIE() {
ua = navigator.userAgent;
/* MSIE used to detect old browsers and Trident used to newer ones*/
var is_ie = ua.indexOf("MSIE ") > -1 || ua.indexOf("Trident/") > -1;
return is_ie;
}
let sections = [];
function sectionParallax() {
if (!isIE()) {
sections.push( new Section("test", 123, 123, 123))
}
}
IE的控制台报告:
SCRIPT1002: Syntax error
在class Section
上。
我完全不知道该怎么做。如何确保IE不会加载这部分代码?
答案 0 :(得分:1)
即使它是一个永远不会执行的功能,JS解析器也必须解析您告诉它加载的JavaScript。
如果要停止IE的加载,请不要加载包含它的<script>
。这意味着如果浏览器确实支持<script>
,则需要动态添加该功能。
如果您需要支持IE,请不要将JS传递给使用IE无法识别的语法的浏览器。考虑使用Babel这样的工具将其转换为IE支持的旧版JavaScript。
答案 1 :(得分:1)
JavaScript classes and constructor不支持IE浏览器,因此,在IE浏览器中,它将显示“ SCRIPT1002:语法错误”错误。
您可以如下修改代码:
var Section = /** @class */ (function () {
function Section(dom, startPosition, endPosition, backgroundPosition) {
this.dom = dom;
this.startPosition = startPosition;
this.endPosition = endPosition;
this.backgroundPosition = backgroundPosition;
}
return Section;
}());
function isIE() {
ua = navigator.userAgent;
/* MSIE used to detect old browsers and Trident used to newer ones*/
var is_ie = ua.indexOf("MSIE ") > -1 || ua.indexOf("Trident/") > -1;
return is_ie;
}
var sections = [];
function sectionParallax() {
if (!isIE()) {
/*If not using IE browser. */
var newsection = new Section("test", 123, 123, 123);
sections.push(newsection);
}
}
答案 2 :(得分:0)
您可以在使用Conditional Comment加载脚本之前检查 client = new RestClient( url + "/data/csv-import/");
request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("X-CSRFToken", csrftoken);
request.AddCookie("csrftoken", csrftoken);
request.AddCookie("sessionid", sessionId);
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"csv_file\"; filename=\"filename.csv\"\r\nContent-Type: text/csv\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"has_headers\"\r\n\r\ntrue\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
request.AddFile("csv_file", filePath + "filename.csv");
response = client.Execute(request);
:
IE