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]); }
        }
    );
}
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.