我最近在ASP.NET Web窗体项目中成功使用了jSignature插件。我试图将相同的功能添加到新的MVC4项目中。当我尝试在调试模式下运行具有jQuery功能的MCV视图时,从jSignature.min.js文件引发以下错误:
“ Microsoft JScript运行时错误:Canvas元素不支持2d上下文。jSignature无法继续。”
Web Forms项目和MVC4项目都在同一客户端计算机上以调试模式从Visual Studio 2010的同一实例运行。
我还注意到,在MVC4项目的“错误列表”中,有50条消息引用了jSignature.min.js文件中定义的变量。
示例:第35行,第56列-'b'已经定义。
谁能告诉我是什么原因造成的,以及我需要做些什么才能使jSignature在MVC4项目中工作?
来自MVC视图的HMTL代码如下:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>jSigTest</title>
<script type="text/javascript" src="../../Scripts/jquery-1.7.1.js"></script>
<script type="text/javascript" src="../../Scripts/jSignature.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#SignatureDiv").jSignature();
});
</script>
</head>
<body>
<div>
This is a jSignature Test Page.
<div id="SignatureDiv">
</div>
</div>
</body>
</html>
最佳答案
这不是MVC问题,这是关于不引用后备脚本和随附的swf。这就是为什么我问您是否正在使用IE7-IE8。
问题:
jSignature使用canvas元素作为插件。 IE7-IE8不支持canvas
,这会导致错误。如果您查看source,您会看到
function initializeCanvasEmulator(canvas){
if (canvas.getContext){
return false
} else {
var window = canvas.ownerDocument.parentWindow
var FC = window.FlashCanvas ?
canvas.ownerDocument.parentWindow.FlashCanvas :
(
typeof FlashCanvas === "undefined" ?
undefined :
FlashCanvas
)
if (FC) {
//code omitted
} else {
throw new Error("Canvas element does not support 2d context. jSignature cannot proceed.")
}
}
}
简单地说,检查画布是否受支持,否则检查后备FC(FlashCanvas),如果找不到,则抛出错误
解析度:
这就是您所谓的jSignature
<!-- you load jquery somewhere above here ... -->
<!--[if lt IE 9]>
<script type="text/javascript" src="path/to/flashcanvas.js"></script>
<![endif]-->
<script src="path/to/jSignature.min.js"></script>
<div id="signature"></div>
<script>
$(document).ready(function() {
$("#signature").jSignature();
});
</script>
您可以在这里找到文件:https://github.com/willowsystems/jSignature下载文件,您将从lib文件夹中获取文件。所需文件
flashcanvas.js
flashcanvas.swf
确保将两个文件放在同一文件夹中,并在
script src="path/to/flashcanvas.js"
中正确设置路径