gpt4 book ai didi

javascript - 从 "onload"处理程序调用 canvas.drawWindow() 可以吗?

转载 作者:行者123 更新时间:2023-11-29 15:05:42 25 4
gpt4 key购买 nike

this Mozilla wiki page 底部的注释目前说:“在处理文档的 onload 事件时使用 canvas.drawWindow() 不起作用。在 Firefox 3.5 或更高版本中,您可以在 MozAfterPaint 事件的处理程序中执行此操作以成功将 HTML 内容绘制到页面上的 Canvas 中加载。”这很好,除了我在 Firefox 3.6.6 中尝试过它并且它确实工作,这让我相信它可能过去不起作用,因为一些错误已经被修复。我宁愿不使用 MozAfterPaint,因为它在 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
},

最佳答案

我希望这不是“根本”无法工作的情况,而是“无法”正常工作的情况。

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

这就是引入 MozAfterPaint 的原因。它允许您在 Gecko 获得足够的信息来呈现页面后注入(inject)代码。

您可以通过监听 DOM 突变事件来解决缺少 MozAfterPaint 的问题。它不是那么干净,但我认为如果您使用它来清除和重置 100-200 毫秒的超时,它会起作用。这不应该对性能造成太大影响。当超时最终到期时,您知道该页面至少已经稳定了那么长时间。

[1] 我花了一个星期的时间来追踪一个全局变量,该变量在执行 onload 处理程序期间从未定义变为已定义。它原来是一个脚本标记,它被拉入一个 JS 文件,该文件具有一些顶级代码,并且它与 onload 处理程序并行执行。

关于javascript - 从 "onload"处理程序调用 canvas.drawWindow() 可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3199074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com