How to fix errors in your .keysnail.js (ja)

Masafumi Oyamada edited this page Sep 24, 2015 · 1 revision

.keysnail.js のエラー修正ガイド

.keysnail.js 内でエラーが発生した際の修正ガイドです。網羅的ではないですが、何かの役に立つかもしれません。

.keysnail.js の XXX 行目を実行中にエラーが発生しました :: missing { before let block

多くのユーザがこのエラーを目にすることでしょう。これは、以前 Firefox でサポートされていた let 式/文 と呼ばれる JavaScript の記法が Firefox 41 になってサポートされなくなり、文法エラーとなるために発生するエラーです(正確には Firefox 41 時点では let 文は文法エラーとなりませんが、将来的に廃止されるようです)。

エラーを修正するためには .keysnail.js から let 式/文を取り除く必要があります。以下の例を参考にしてみてください。また、詳しくは https://github.com/mooz/keysnail/pull/176 を参照ください。

以下、修正例です。

Example 1

Fix

// Original (invalid)
function (ev, arg) {
    let (elem = document.commandDispatcher.focusedElement) elem && elem.blur();
    gBrowser.focus();
    content.focus();
}

to

// Corrected (valid)
function (ev, arg) {
    let elem = document.commandDispatcher.focusedElement;
    if (elem) { elem.blur(); }
    gBrowser.focus();
    content.focus();
}

Example 2

Fix

// Original (invalid)
function (ev, arg) {
    gBrowser.loadOneTab(
        let (url = command.getClipboardText())
            url.indexOf("://") === -1 ?
            util.format("http://www.google.com/search?q=%s&ie=utf-8&oe=utf-8", encodeURIComponent(url)) :
            url,
        null, null, null, false
    );
}, false

to

// Corrected version (valid)
function (ev, arg) {
    let url = command.getClipboardText();
    if (url.indexOf("://") === -1) {
        url = util.format("http://www.google.com/search?q=%s&ie=utf-8&oe=utf-8", encodeURIComponent(url));
    }
    gBrowser.loadOneTab(url, null, null, null, false);
}, false

Example 3

Fix

// Original (invalid)
function (ev) {
    if (!command.kill.ring.length)
        return;

    let (ct = command.getClipboardText())
        (!command.kill.ring.length || ct != command.kill.ring[0]) && command.pushKillRing(ct);

    prompt.selector(
        {
            message: "Paste:",
            collection: command.kill.ring,
            callback: function (i) { if (i >= 0) key.insertText(command.kill.ring[i]); }
        }
    );
}

to

// Corrected (valid)
function (ev) {
    if (!command.kill.ring.length)
        return;

    let ct = command.getClipboardText();
    if (!command.kill.ring.length || ct != command.kill.ring[0]) {
        command.pushKillRing(ct);
    }

    prompt.selector(
        {
            message: "Paste:",
            collection: command.kill.ring,
            callback: function (i) { if (i >= 0) key.insertText(command.kill.ring[i]); }
        }
    );
}