我正在与 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 请求。但是所有文件都加载好了,我相信......