Javascript 使用HTML画布的问题&;Greasemonkey无法在2D上下文上绘制图像()

Javascript 使用HTML画布的问题&;Greasemonkey无法在2D上下文上绘制图像(),javascript,firefox,html,canvas,greasemonkey,Javascript,Firefox,Html,Canvas,Greasemonkey,在我的Greasemonkey脚本中,当我获得要与HTML画布一起使用的HTMLImageElement的句柄时,在Firefox的错误控制台中会出现以下错误(我认为这是因为它包含在XPCNativeWrapper中): 将GM_log()语句贯穿于我的代码中,我已经跟踪了我尝试使用的图像对象,从它的初始赋值到我尝试将它与HTML画布一起使用 它始终包装在XPCNativeWrapper中: [object XPCNativeWrapper [object HTMLImageElement]]

在我的Greasemonkey脚本中,当我获得要与HTML画布一起使用的HTMLImageElement的句柄时,在Firefox的错误控制台中会出现以下错误(我认为这是因为它包含在XPCNativeWrapper中):

GM_log()
语句贯穿于我的代码中,我已经跟踪了我尝试使用的图像对象,从它的初始赋值到我尝试将它与HTML画布一起使用

它始终包装在XPCNativeWrapper中:

[object XPCNativeWrapper [object HTMLImageElement]]

通过使用
image.wrappedJSObject
获取对
HTMLImageElement的引用,我已经打开了
HTMLImageElement

我的画布代码:

var canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;

var ctx = canvas.getContext("2d");
ctx.drawImage(image, 0, 0);

你知道Firefox为什么会抛出上述组件故障代码吗?

我应该更彻底地了解谷歌

image.wrappedJSObject;

很有效。

我应该更彻底地研究一下谷歌

image.wrappedJSObject;
工作

这就是我所做的。希望能有帮助


这就是我所做的。希望能有帮助

我也有同样的问题。当我使用图像的绝对/完整URL时,错误消失了。另外,正如其他人所指出的,首先确保图像已加载,或者首先用javascript创建一个新图像()。当我使用图像的绝对/完整URL时,错误消失了。另外,正如其他人所指出的,首先确保图像已加载,或者首先用javascript创建一个新图像()


firefox 3.6.16的工作示例(我有类似的问题):


我没有将这个canvas元素附加到DOM/body中-这会导致问题吗?查看其他示例代码,我尝试了
unsafeWindow.document.createElement(“canvas”)
,但始终无法使它正常工作。改变了我的方法,有点笨拙,通过AJAX重新请求图像,强制MIME类型为“text”来读取图像数据。我无法复制任何错误,因为我不知道
image
是什么。它只是HTML文档中的一个普通图像,我的是100 x 80像素。你确定图像已完成加载吗?换句话说:image.complete是否完整?看起来图像数据不可用。我没有将此canvas元素附加到DOM/body中-这会导致问题吗?查看其他示例代码,我尝试了
unsafeWindow.document.createElement(“canvas”)
,但始终无法使其正常工作。改变了我的方法,有点笨拙,通过AJAX重新请求图像,强制MIME类型为“text”来读取图像数据。我无法复制任何错误,因为我不知道
image
是什么。它只是HTML文档中的一个普通图像,我的是100 x 80像素。你确定图像已完成加载吗?换句话说:image.complete是否完整?看起来图像数据不可用。我刚刚用FF 4.0.1尝试了这个。以这种方式创建的canvas DOM对象没有此类属性“wrappedJSObject”。你在用FF吗。什么版本?它应该在Greasemonkey上下文中运行,而不是在Firefox上下文中运行。我刚刚用FF 4.0.1尝试了这个版本。以这种方式创建的canvas DOM对象没有此类属性“wrappedJSObject”。你在用FF吗。什么版本?它应该在Greasemonkey上下文中运行,而不是在Firefox上下文中运行。
var canvas = document.createElement("canvas").wrappedJSObject,
ctx = canvas.getContext("2d");

canvas.width = image.width;
canvas.height = image.height;

ctx.drawImage(image, 0, 0);