我最近在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"中正确设置路径

08-19 06:13