Javascript 使用HTML画布的问题&;Greasemonkey无法在2D上下文上绘制图像()
在我的Greasemonkey脚本中,当我获得要与HTML画布一起使用的HTMLImageElement的句柄时,在Firefox的错误控制台中会出现以下错误(我认为这是因为它包含在XPCNativeWrapper中): 将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]]
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);