jSignature 在 ASP.NET Web Forms 中工作,但在 MVC4 中不工作——为什么?

jSignature working in ASP.NET Web Forms, but not in MVC4 - Why?

我最近在 ASP.NET Web Forms 项目中成功使用了 jSignature 插件。我正在尝试将相同的功能添加到新的 MVC4 项目中。当我尝试 运行 具有 jQuery 功能的 MCV 视图时,在调试模式下,从 jSignature.min.js 文件中抛出以下错误:

"Microsoft JScript runtime error: Canvas element does not support 2d context. jSignature cannot proceed."

Web 窗体项目和 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.")
        }
    }
}

简单来说,检查是否支持 canvas,否则检查后备 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 文件夹中获取文件。所需文件

  1. flashcanvas.js
  2. flashcanvas.swf

务必将两个文件放在同一个文件夹中,并在script src="path/to/flashcanvas.js"

中正确设置路径