0

我正在与 IE8 和flashcanvas.js试图捕获签名的插件作斗争。

演示在 IE8 上运行良好,但由于我使用了许多其他插件,包括 requireJS,我在 IE8 上遇到了某种问题。

我已经确定了这一点:

function onReadyStateChange() {
if (document.readyState === "complete") {
    document.detachEvent(ON_READY_STATE_CHANGE, onReadyStateChange);

    var canvases = document.getElementsByTagName(CANVAS);

    // => returns 1 in IE8 debugger
    console.log( canvases.length )
    // => returns objectHTMLCollection
    console.log( canvases )

    for (var i = 0, n = canvases.length; i < n; ++i) {
        console.log(" run "+i)

        // => this produces an error...
        console.log( canvases[i])

        // trigger
        FlashCanvas.initElement(canvases[i]);
        }
    }
}

我不明白为什么它不起作用,但canvases[i]会引发[object HTMLUnknownElement]错误。

问题
知道可能是什么原因吗?作为一种工作方法,我怎么能在objectHTMLCollection不使用[]和停留在 Javascript 的情况下选择我的第一个元素!

我还尝试向id画布元素添加一个或按类选择它(使用 Jquery)。同样的结果,,length=1选择=忘记它。

感谢帮助!

编辑
我从我的主应用控制器请求这样的插件:

$(document).on('pagebeforeshow', '#basket', function(e, data){  

    // signaturePad
    var signIt = $('.signatureWrapper');
    if ( signIt.length > 0 && signIt.jqmData('bound') != true ) {
        signIt.jqmData('bound', true);

        require(['services/signature/app'], function (App) {
        App.render({target: signIt, drawOnly: true });
            });
        };

这将调用一个app.js文件,该文件定义了所需的所有依赖项,并且一旦加载了所有内容,就触发插件:

define([  'services/signature/app'
        , 'services/signature/jquery.signaturepad.min'
        , 'services/signature/json2.min'
        , 'services/signature/flashcanvas'
        ], function( app, signature, json2, flashcanvas ) {

    function render(parameters) {
        parameters.target.signaturePad({ drawOnly:parameters.drawOnly });
        };
        return {
            render:render
            };  
        });

flashcanvas.js所以,当我真的不需要它时,我正在浪费一个 http 请求。但是所有文件都加载好了,我相信......

4

3 回答 3

3

你如何将 canvas 元素添加到 DOM 中?由于 IE8 不支持 canvas 元素,您需要动态创建它并将其附加到 DOM,如FlashCanvas 文档中所示

var canvas = document.createElement("canvas");
document.getElementById("target").appendChild(canvas);
if (typeof FlashCanvas != "undefined") {
    FlashCanvas.initElement(canvas);
}
于 2012-10-26T12:42:42.520 回答
1

数组 document.getElementsByName(String balise) http://www.toutjavascript.com/reference/reference.php?iref=156

你写了 :

var canvases = document.getElementsByTagName(CANVAS);

你确定 CANVAS 是一个字符串吗?也许你想写

var canvases = document.getElementsByTagName("CANVAS");
于 2012-10-26T12:46:31.500 回答
0

尝试将集合转换为数组:

var arr = Array.prototype.slice.call( canvases );

于 2012-10-26T12:23:04.510 回答