代码之家  ›  专栏  ›  技术社区  ›  Tyler

是否可以从“onload”处理程序调用canvas.drawWindow()?

  •  3
  • Tyler  · 技术社区  · 14 年前

    下面的注释 this Mozilla wiki page 目前说:“在处理文档的OnLoad事件时使用canvas.drawWindow()不起作用。在Firefox 3.5或更高版本中,您可以在 MozAfterPaint 事件在页面加载时成功地将HTML内容绘制到画布中。”这很好,只是我在Firefox 3.6.6中尝试过,而且 工作,让我相信,也许它以前不工作,因为一些错误,已经被修复。我宁愿不使用莫扎特绘画,因为它在3.5之前的版本中不起作用。有重要原因吗 要使用“加载”事件,如果是,我该怎么做才能与旧版本的Firefox兼容?

    编辑:这就是我的代码的工作方式。在 init() 我的分机的功能,我呼叫 gBrowser.addEventListener("load", MyExtension.onPageLoad, true); 然后 MyExtension.onPageLoad 本质上是:

    onPageLoad : function(e) {
      var win = e.originalTarget.defaultView;
      // create an html:canvas, adjust its size, etc. following the example of the "TabPreview" extension
      var ctx = canvas.getContext("2d");
      ctx.drawWindow(win, 0, 0, w, h, "rgb(255, 255, 255");
      // add the canvas to the DOM
    },
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Devon_C_Miller    14 年前

    我希望这不是一个“根本不起作用”的案例,而是一个“根本不起作用”的案例。

    传统上, onload 在页面的HTML加载完成时运行。CSS和脚本将在稍后发生,或者可能 同时 .

    这就是为什么 MozAfterPaint 介绍。它允许您在Gecko有足够的信息来呈现页面后注入代码。

    你可以在没有 莫扎特涂料 ,通过监听DOM突变事件。它没有那么干净,但我认为如果你用它来清除和重置100-200毫秒的弹齿,它会起作用。这不会造成太大的性能损失。当超时最终到期时,您知道页面至少已经稳定了那么长时间。

    [1]在执行onload处理程序期间,我花了一周时间来寻找一个从未定义变为定义的全局变量。它原来是一个脚本标记,在一个包含顶级代码的JS文件中提取,并在 平行 使用OnLoad处理程序。

        2
  •  0
  •   Tyler    14 年前

    看起来Mozilla文档是错误的,可以从“加载”事件调用canvas.drawWindow()。