Javascript 函数适用于 FF 和 Chrome,但不适用于比尔叔叔的浏览器

标签 javascript cross-browser

我有以下函数,我使用它(诚然,作为 hack,因为我仍然没有理解 javascript 的奇怪变量范围规则),从脚本中获取所有具有已知前缀的全局变量。

该功能适用​​于 FF 和 Google Chrome(假设它适用于所有 Moz 衍生浏览器)。然而,我刚刚在 IE8(又名比尔盖茨叔叔 [如比尔盖茨] 浏览器)中对其进行了测试,并且(也许不足为奇)该功能不起作用。我调试了这个函数,看起来全局变量存储在另一个对象中(我可能是错的,我现在才阅读 JS 几天)。无论如何,这是在基于 Moz 的浏览器中正常工作的函数:

function getGlobalProperties(prefix) {
  var keyValues = [], global = window; // window for browser environments
  for (var prop in global) {
    if (prop.indexOf(prefix) == 0) // check the prefix
      keyValues.push(prop + "=" + global[prop]);
  }
  return keyValues.join('&'); // build the string
}

我是否需要条件分支(以及是否在 IE 下运行的测试)?

最佳答案

这是一个已知问题,IE 不会为窗口对象上的 for-in 循环公开全局变量(尽管事实上可以像 window.globalVar 一样直接访问全局变量)。 可能的解决方法是将全局变量显式声明为窗口对象的成员,例如:

window.globalVar = 1;
...
alert(globalVar); // = 1
globalVar = 'xxx';
alert(window.globalVar); // = xxx

通过在脚本开头以这种方式声明变量,您将使它们可用于 for-in 循环。

更好的解决方案当然是避免使用全局变量 :-) 或者至少将它们全部保存在单独的变量中,您以后可以在没有黑客的情况下进行遍历。

关于Javascript 函数适用于 FF 和 Chrome,但不适用于比尔叔叔的浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2263027/

相关文章:

javascript - 获取背景图像的尺寸

javascript - IE 中出现这个问题是怎么回事?

javascript - 如何使 Internet Explorer 模拟指针事件 :none?

javascript - 在javascript中自定义排序,基于另一个字段排序

javascript - D3 形状跟随路径

javascript - 如果将项目放入数组并排序,则确定项目的潜在索引。

javascript - 如何使用 JavaScript 的 RegExp 执行条件替换?

html - :after in Internet Explorer isn't working

javascript - 想要拖动示例图像而不是真实元素

javascript - jQuery fadeOut ("slow") 在 IE 上的问题