0

flashcanvas.js署名を取得しようとしている IE8 とプラグインと戦っています。

デモは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]ます。

質問:
何が原因でしょうか? 回避策として、 Javascript を使用して滞在objectHTMLCollectionせずに、どのように私の最初の要素を選択できますか?[]

また、キャンバス要素に追加するか、クラスごとに選択しようとしました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-request を無駄にしています。しかし、すべてのファイルは問題なくロードされていると思います...

4

3 に答える 3

3

DOMにcanvas要素をどのように追加していますか?IE8はcanvas要素をサポートしていないため、FlashCanvasのドキュメントに示されているように、動的に作成してDOMに追加する必要があります。

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 は String ですか? たぶんあなたは書きたいです

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

コレクションを配列に変換してみてください:

var arr = Array.prototype.slice.call( キャンバス );

于 2012-10-26T12:23:04.510 に答える