Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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/1/ms-access/4.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 IE11对象不';t支持属性或方法';指数';(但它不是一个对象,可以在其他浏览器中使用)_Javascript_Internet Explorer_Cross Browser_Legacy - Fatal编程技术网

Javascript IE11对象不';t支持属性或方法';指数';(但它不是一个对象,可以在其他浏览器中使用)

Javascript IE11对象不';t支持属性或方法';指数';(但它不是一个对象,可以在其他浏览器中使用),javascript,internet-explorer,cross-browser,legacy,Javascript,Internet Explorer,Cross Browser,Legacy,我有一个脚本,它遍历数组中传递的值,并检查浏览器是否本机支持这些项。这在Chrome、Edge、FireFox和Safari中运行良好,但IE11和更老版本(真正需要它的浏览器)会抛出一个错误。 数组值是字符串(如下所示),但出于某种原因,IE11将它们视为对象,这意味着当我尝试检查数组值时。在字符串中(出错) 我已尝试将数组项转换为字符串,但这只会导致对象对象或对象未定义 我已经设置了一个包含全套代码的代码笔: IE中可以使用的版本是:(尽管这可能会过期!) //https://githu

我有一个脚本,它遍历数组中传递的值,并检查浏览器是否本机支持这些项。这在Chrome、Edge、FireFox和Safari中运行良好,但IE11和更老版本(真正需要它的浏览器)会抛出一个错误。 数组值是字符串(如下所示),但出于某种原因,IE11将它们视为对象,这意味着当我尝试检查数组值时。在字符串中(出错)

我已尝试将数组项
转换为字符串
,但这只会导致
对象对象
对象未定义

我已经设置了一个包含全套代码的代码笔:

IE中可以使用的版本是:(尽管这可能会过期!)

//https://github.com/willstocks-tech/dynamically-polyfill-features-for-a-script/releases/
动态聚合物填充(
['IntersectionObserver','IntersectionObserverEntry','Object.assign','Array.CopyInner']
,'https://cdn.jsdelivr.net/npm/quicklink@1.0.0/dist/quicklink.umd.js'
,“quicklink()”
)
函数dynamicPolyfill(tocheck、scriptToPolyfill、FunctionToRunLoad){
如果(承诺类型!=“未定义”){
var检查承诺=[];
if(Array.isArray(tocheck)){
检查(
功能(tocheck){
检查承诺。推送(检查(tocheck))
}
)
}否则{
检查承诺。推送(检查(tocheck))
}
checkpromissions=checkpromissions.filter(函数(p){return p!==undefined}).join(“”);
loadPolyfill(检查承诺、scriptToPolyfill、FunctionToRunLoad)
}否则{
promiFill(检查、脚本填充、函数卸载);
}
}
函数提示(tocheck、scriptToPolyfill、FunctionToRunLoad){
var promPolyfill=document.createElement('script');
promPolyfill.src=('https://polyfill.io/v3/polyfill.min.js?features=Promise'); 
document.body.appendChild(promPolyfill);
promPolyfill.onerror=函数(响应){
控制台。错误(“承诺失败”,响应);
} 
promPolyfill.onload=函数(tocheck、scriptToPolyfill、FunctionToRunLoad){
dynamicPolyfill(tocheck、scriptToPolyfill、FunctionToRunLoad);
}
}
功能检查(check){
var splitChars=';
如果((签入窗口)!=true | |(签入此)!=true){
如果(检查indexOf(拆分字符)>=1){
var split=check.split('.');
var firstWord=window[split[0]];
var lastWord=新对象(split[split.length-1]);
if(firstWord中的lastWord!=true&&firstWord.prototype中的lastWord!=true){
退货检查;
}
}否则{
退货检查;
}
}
}
函数loadPolyfill(url、scriptToPolyfill、FunctionToRunLoad){
如果(url!==“”){
var polyfill=document.createElement('script');
polyfill.src=('https://polyfill.io/v3/polyfill.min.js?features=“+encodeURIComponent(url));
document.body.appendChild(polyfill);
polyfill.onerror=函数(响应){
控制台错误(“加载polyfill失败!”,响应);
} 
polyfill.onload=函数(){
loadMyScript(scriptToPolyfill、FunctionToRunLoad)
}
}否则{
loadMyScript(scriptToPolyfill、FunctionToRunLoad)
}
}
函数loadMyScript(url,functionToRunLoad){
if(Array.isArray(url)){
var承诺=[];
url.forEach(
函数(url){
promises.push(非空白url(url));
}
);
所有(承诺)
。然后(
函数(){
initialiseMyScript(函数unonload)
}
).catch(函数(错误){返回错误})
}如果(!Array.isArray(url)&&url!==null&&url!='',则为else{
非空白url(url)
。然后(
函数(){
initialiseMyScript(函数unonload)
}
).catch(函数(错误){返回错误})
}否则{
initialiseMyScript(函数unonload)
}
}
函数非空URL(uri){
返回新承诺(
函数(解析、拒绝){
var thescript=document.createElement('script');
thescript.src=encodeURI(uri);
document.body.appendChild(脚本);
thescript.onerror=函数(响应){
返回拒绝(“加载脚本失败!”,响应);
} 
thescript.onload=函数(){
返回解析(uri);
} 
}
)
}
函数initialiseMyScript(functionToRunLoad){
if(Array.isArray(functionToRunLoad)){
函数unload.forEach(
功能(FunctionToRunLoad){
初始化脚本(FunctionToRunLoad)
}
)
}否则{
初始化脚本(FunctionToRunLoad)
}
函数初始化脚本(fn){
试一试{
窗口[fn];
}捕捉(错误){
console.error('出现错误:',err,err.name,err.stack);
}
}

}
您可以在IE11调试器中看到,
tocheck
在该点是一个事件对象(显然没有
索引)。这是因为以下代码:

promPolyfill.onload = function(tocheck, scriptToPolyfill, functionToRunonLoad) {
    dynamicPolyfill(tocheck, scriptToPolyfill, functionToRunonLoad);
}
DOM事件处理程序接收的第一个也是唯一一个参数是事件对象,但您接受它为
tocheck
,然后用该事件调用
dynamicPolyfill

你的意思可能是:

promPolyfill.onload = function() {
    dynamicPolyfill(tocheck, scriptToPolyfill, functionToRunonLoad);
};

或类似的。在任何情况下,问题都是在
事件
对象上调用
indexOf

您试图使用
null
indexOf
,这是怎么回事?我的意思是,当条件通过时,
check
不存在……您问题中的代码有语法错误(我在将其放入可运行的现场代码段时发现)。我添加了看起来合适的
}
,但请对照实际代码进行检查。最好使用“复制和粘贴”来复制代码(在第一次将代码复制到绝对最小值之后),以避免引入这样的错误。为糟糕的代码片段表示歉意-我现在添加了完整的代码片段-错误不是承诺的,而是在
if(check.indexOf(splitChars)>=1){
Ahaaaa-@t-j-crowder谢谢!对不起,我对JS还是相当陌生,我一直在拔头发,因为我不明白为什么它一直认为它是一个对象!