【问题标题】:Javascript create event with IE9Javascript 用 IE9 创建事件
【发布时间】:2014-06-15 04:44:42
【问题描述】:

我正在尝试在 JavaScript 中创建自定义事件。

我有一个带有运行 Internet Explorer 9 的 WebBrowser 的 WPF 应用程序。

代码:

var evt = document.createEvent("Event");

evt.initEvent("readerstatechanged", true, false);
window.dispatchEvent(evt);

错误:

我也试过了:

var evt = new Event("Event");

错误:

您知道如何使用 IE 9 创建自定义事件吗?

编辑:

我用 createEventObject 进行了更改,但是“InitEvent”不起作用:

            var evt = document.createEventObject("Event");

            evt.initEvent("printerstatechanged", true, false);
            window.dispatchEvent(evt);

然后我需要像这样使用 attachEvent :

            window.attachEvent('printerstatechanged', function (e) {
                //Do something
            });

【问题讨论】:

  • 为什么需要这样做?
  • 解释起来很复杂,但我需要它。如果我更改 IE11 的浏览器版本,它就可以工作,但不幸的是我需要 IE 9 支持...
  • 你能解释一下吗?也许问题可以用不同的方式解决。
  • 看我的另一篇帖子:stackoverflow.com/questions/23344625/…我以为找到了解决方案,但我终于需要IE9的支持了

标签: javascript events internet-explorer-9


【解决方案1】:

IE9 支持 DOM3 事件,因此您可以创建和挂钩自定义事件。这是一个完整的示例,它适用于 IE9 和任何其他兼容 DOM3 的浏览器:Live Copy

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>IE9+ Custom Event</title>
</head>
<body>
  <script>
    (function() {
      // Hooking the event, in this case on documentElement
      document.documentElement.addEventListener("readerstatechanged", function() {
        display("readerstatechanged received");
      });

      // Creating it
      display("Creating");
      var evt = document.createEvent("CustomEvent");
      evt.initCustomEvent("readerstatechanged", true, false, {});
      // Could put custom data here -------------------------^^

      // Firing it on documentElement
      display("Firing");
      document.documentElement.dispatchEvent(evt);

      function display(msg) {
        var p = document.createElement('p');
        p.innerHTML = String(msg);
        document.body.appendChild(p);
      }
    })();
  </script>
</body>
</html>

它在 IE8 中不起作用,但正如您所强调的 IE9...

如果您的网站显示在名不符实的“兼容性视图”中,IE 会关闭这些标准功能,使其与现实世界的兼容性降低而不是提高。我相信,对 Intranet 站点使用“兼容性视图”是默认设置,这只是 asinine。您可以通过在head 部分添加meta 标签来向 IE 保证您确实知道自己在做什么:

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

【讨论】:

  • 感谢您的回答!但它无法识别“AddEventListerner”和“createEvent*。我使用 WPF WebBrowser 并且用户代理是:“Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.3;WOW64;Trident/7.0)” ?
  • 我正在使用来自weblog.west-wind.com/posts/2011/May/21/… 的“9999 (0x270F)” 但没关系,我现在将使用 IE10 兼容性...再次感谢
  • @Gab:您需要确保浏览器不在“兼容性视图”中(这奇怪地删除了 addEventListener 等功能,使浏览器不兼容,而不是更多的)。将&lt;meta http-equiv="X-UA-Compatible" content="IE=Edge"/&gt; 添加到您的head 部分; more here。阿西宁,嗯?
  • "" 有效!谢谢
猜你喜欢
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多