4

まず第一に:はい、私はこの答えを読みました...そして、はい、スクリプトの後にメタはありません(ページにメタがないため)、いいえ、タイムアウトやajax-requestはありません

次のヘルパー メソッドがあります (はい、プロトタイプ メソッドを作成することもできました ...):

function removeElementFromArray(array, compareMethod) {
    if (!array) {
        return;
    }
    if (!$.isFunction(compareMethod)) {
        return;
    }
    var index = getIndexOfElement(array, compareMethod);
    if (index < 0) {
        return;
    }
    array.splice(index, 1);
}
function getIndexOfElement(array, compareMethod) {
    if (!array) {
        return -1;
    }
    if (!$.isFunction(compareMethod)) {
        return -1;
    }
    for (var i = 0; i < array.length; i++) {
        var element = array[i];
        if (compareMethod(element)) {
            return i;
        }
    }
    return -1;
}

私はこれを次のように呼び出しています:

$foo.on('click', function () {
    removeElementFromArray(window.myArray, function (element) {
        return // some condition
    });
});

次の行で、「SCRIPT5011: 解放されたスクリプトからコードを実行できません」(IE レンダリング モード < 10 でのみ) という例外が発生します。

array.splice(index, 1);

ただし、最初の呼び出しではなく、後続の呼び出し (同じ配列の場合) ...

しかし、この例外が発生する理由は 1 つも思いつきません。他の行とコールスタックで配列にアクセスしているためです (ご覧のとおり、getIndexOfElement では配列を反復処理しています)。

誰でも私を助けることができますか?

4

1 に答える 1

2

この質問には、iframes 関係に関する適切な回答が含まれています。(OPの提案による回答として追加)。

于 2013-04-05T10:08:57.190 に答える