Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我会遇到被阻止的脚本执行错误?_Javascript_Csscritic - Fatal编程技术网

Javascript 为什么我会遇到被阻止的脚本执行错误?

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

我正在使用它将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);
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