为什么在chrome扩展的内容脚本中使用document.location时页面会重新加载?

时间:2015-10-16 09:56:03

标签: javascript dom google-chrome-extension

var location = document.location;

这是我的chrome扩展程序的内容脚本的第一行导致 页面重新加载。这是预期的行为吗?我在文档中找不到任何提及的内容。

1 个答案:

答案 0 :(得分:4)

如果你在全球范围内(我有预感),那么就没有局部变量,而var什么都不做。因此,location等于this.locationthis == window ......您可以看到它的去向。在您的控制台中尝试:var location = "http://example.com";或者,对于较不图形的示例,var foo = 17; console.log(window.foo);

(注意:我不是百分百肯定,因为我已经写了一段Chrome扩展程序并且不知道你在全球范围内的事实;但它是唯一的解释符合我能想到的事实。)

要修复它,要么更改变量的名称,要么更好地引入非全局上下文; e.g:

(function() {
  var location = window.location; // does not blow up
})();

或等效

function pleaseDontBlowUp() {
  var location = window.location; // does not blow up
}
pleaseDontBlowUp();