Javascript 为什么我会遇到被阻止的脚本执行错误?
我正在使用它将html转换为画布。当我将代码更改为:Javascript 为什么我会遇到被阻止的脚本执行错误?,javascript,csscritic,Javascript,Csscritic,我正在使用它将html转换为画布。当我将代码更改为: var canvas = document.getElementById("save_image_canvas"); // rasterizeHTML.drawHTML('<div style="font-size: 20px;">Some <span style="color: green">HTML</span> with an image</div>', canvas); rasteriz
var canvas = document.getElementById("save_image_canvas");
// rasterizeHTML.drawHTML('<div style="font-size: 20px;">Some <span style="color: green">HTML</span> with an image</div>', canvas);
rasterizeHTML.drawHTML(document.getElementById("mattes").innerHTML, canvas);
光栅化HTML生成的图像在屏幕上显示时效果良好,但当我调用canvas.toDataURL时,生成的图像全部为黑色。根据错误消息判断,您使用的是基于Webkit的浏览器,很可能是Chrome。当带有的
元素尝试运行JavaScript时(仅当该属性中指定了allow scripts
时才允许),会显示此错误消息(已介绍)。查看rasterizeHTML源代码可以看出,该函数创建了这样一个框架。它用于CalculatedDocumentContentSize()
,文档内容被复制到临时沙盒框架中,以测量其大小。显然,该文档还包含一些
标记,这些标记会导致错误(不是因为脚本的来源,而是因为脚本通常是不允许的)
现在,您的代码当然不会调用CalculatedDocumentContentSize()
。它由函数drawDocumentImage()
调用,函数doDraw()
调用,函数rasterizeHTML.drawDocument()
调用。最后,问题是:您传递的HTML代码包含
标记
考虑到在您正在绘制的HTML代码上执行脚本似乎不是目的(无executeJS
选项),您应该能够简单地将
标记移动到其他地方,以便它们不在mattes
元素中。如果不可能,您仍然可以在源代码上运行一些正则表达式来删除所有脚本标记,例如:
var code = document.getElementById("mattes").innerHTML;
code = code.replace(/<\/?script\b.*?>/g, "");
rasterizeHTML.drawHTML(code, canvas);
请注意,这只会帮助您摆脱警告。我怀疑这一警告是否是导致图像空白的原因,因此您可能需要再问一个问题。@WladimirPalant有一个很好的描述。如果你在一个你无法控制的网站上遇到这种情况,你可以用下面的命令启动Chrome,Chrome将接受脚本 窗口:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --args --allow-scripts
Linux:
google-chrome --args --allow-scripts
同一台服务器也指同一个端口,不使用文件://?重要的是服务器,而不是服务器我不确定你的意思阅读我给出的链接:“服务器”在这里太模糊了,不知道你是否做对了。我认为我做对了。我不确定。注释行在没有错误的情况下工作,也会影响CSScritic。所以我添加了标记。当我输出document.getElementById(“mattes”).innerHTML时,我得到了
我没有看到任何脚本标记。我也尝试过使用该代码,但仍然得到错误。@AllisonC:ondrop属性和类似属性也包含JavaScript代码。那么我需要做什么呢。我无法删除原始代码中的那些内容。这会删除错误,但当它实际保存图像时,该div的内容将全部删除black@Ciberman在你尝试之前,所有的Chrome进程都关闭了吗?Chrome需要从头启动,否则它将无法工作。是的。我解决了在我的脚本标签中添加“允许脚本”atribute的问题。
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --args --allow-scripts
google-chrome --args --allow-scripts