Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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 在百思买';s网站_Javascript_Internet Explorer_Debugging_Internet Explorer 8 - Fatal编程技术网

Javascript 在百思买';s网站

Javascript 在百思买';s网站,javascript,internet-explorer,debugging,internet-explorer-8,Javascript,Internet Explorer,Debugging,Internet Explorer 8,我在bestbuy.com的IE8中发现了一个bug,我似乎无法理解它为什么会出现。它也出现在IE8中的comcast.com和raymourflanigan.com等网站上,但不在google.com或godaddy.com上 以下代码抛出一个“无效的过程调用或参数”错误(特别是最后一行抛出错误): 这是非常奇怪的,因为我在IE8的其他网站上也尝试过,而且效果很好。我尝试使用.call而不是.apply,甚至将对原始appendChild方法的引用存储到元素原型上的另一个变量,但这两次尝试都引

我在bestbuy.com的IE8中发现了一个bug,我似乎无法理解它为什么会出现。它也出现在IE8中的comcast.com和raymourflanigan.com等网站上,但不在google.com或godaddy.com上

以下代码抛出一个
“无效的过程调用或参数”
错误(特别是最后一行抛出错误):

这是非常奇怪的,因为我在IE8的其他网站上也尝试过,而且效果很好。我尝试使用
.call
而不是
.apply
,甚至将对原始
appendChild
方法的引用存储到
元素
原型上的另一个变量,但这两次尝试都引发了相同的错误

这是什么原因造成的?

编辑

“什么类型的代码可能导致此错误?”

错误似乎与
document.body
不可用有关,因为页面处于严格模式。根据指令,百思买进入该模式:

<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">

我做这把小提琴是为了测试这种行为:

我首先决定在多个浏览器中测试这种行为

在chrome、firefox、safari和IE8中运行时不会出错

请注意,要在ie8上测试此小提琴(或任何真正的小提琴),必须使用
/embedded
,然后单击“结果”

因此,让我们从承认这些网站上有某种东西导致了冲突开始


我在bestbuy.com上使用IE8重复了这个错误,并确认它在google.com上确实有效

但是,这不是每个人都说的
apply
appendChild
的问题。这是传递
document.body
时的一个问题。您可以在bestbuy.com上使用以下代码进行测试:

(function(){
 var p = document.createElement("p");
 p.innerHTML = "APPEND";
 var holder = Element.prototype.appendChild;
 var d = document.getElementById("header");
 holder.apply(d, [p]);
})()
也许是因为他们的一个插件连接到了身体上。有趣的是,这在百思买的ie控制台上运行

$("body").append('<p>Append!</p>');
$(“body”).append(“append!

”);
我查看了许多插件,找不到导致过载或冲突的确切代码行,但它肯定在那里,很可能是嗅探用户代理的结果。

调试器说“'Element'未定义”对于Travis的代码,我加载页面时收到的唯一JS异常是“hasAttribute”是不受支持的方法。只有当IE8以兼容模式(文档模式:IE7标准)加载页面时,这两种情况才会发生,但我加载的页面可能与您的页面不同:您的代码使用元素,因此异常情况与Travis的代码相同。 答案如下:


IE7中没有“元素”。

对我来说,这在百思买网站上运行,控制台中没有任何问题。虽然它不是IE8而是IE10中的IE8模式。@TomasKirda是的,在IE8中用虚拟机试试,让我知道它是否有效。很抱歉回避这个问题,但我不明白为什么你不简单地使用document.body.appendChild(p)@JustinMeltzer:您能提供更精确的URL引用,在哪里可以重现问题或提供演示吗?@JustinMeltzer:在JavaScript控制台中测试可能会给出错误的结果。我想起了一本关于JavaScript的书和另一篇关于书中一些错误部分的长篇评论文章。这本书的作者写了一些关于基于JavaScript控制台而不是使用JavaScript程序的web浏览器的声明。所以书中有一些错误的信息(一般来说是非常好的)。你到底有什么问题并试图解决?您需要在页面上注入一些元素吗?你写过浏览器插件吗?您是否能够创建具有相同问题的干净JSFIDLE演示?很有趣。没有意识到它是特定于
document.body
。什么样的代码可能导致此错误?你能想出解决这个错误的方法吗(同时仍然能够使用
document.body
)?@JustinMeltzer-我找不到导致错误的代码。可能是拦截了函数调用,可能是iframe以某种方式被用作预防工具(不太可能),或者可能是
body
在某种自定义实现的特定位置被重载。
(function(){
 var p = document.createElement("p");
 p.innerHTML = "APPEND";
 var holder = Element.prototype.appendChild;
 var d = document.getElementById("header");
 holder.apply(d, [p]);
})()
$("body").append('<p>Append!</p>');