Foxy GesturesでMake Link代替
2018-11-13


これまでCopy URL Lite+を改悪して使っていたのですけれど、Quantumからユーザスクリプトが使えなくなったことでMake Link的な拡張が必要になりました。

Format Linkですむ話なのですけれど、Copy URL Lite+のようにカスタマイズしまくりたいw
かと言ってJavaScriptからして断片的な知識しかなく拡張を作るのはちょっと無理。orz

そこでこの前も参考にさせて頂いたTEXST.NETから「タイトルとURLをコピー」のスクリプトを参考にカスタマイズしてみました。

そのままジェスチャーでタイトル(改行:\n)URLをクリップボードにコピー。
Ctrlキーを押しながらジェスチャーでhtml形式でタイトルとURLをクリップボードにコピーします。
今回のカスタマイズとしてAmazonの商品ページではショートURIでコピーされるようにしていますw

var promise = executeInBackground(() => {
        return getActiveTab(tab => {
                return tab;
        });
});

promise.then((src) => {
        var asin = '', str = '';
        if(src.url.split('/')[2] == 'www.amazon.co.jp') {
                try{
                        asin = document.getElementById('ASIN').value;
                }catch(e){
                        asin = false;
                }
                if(asin){
                        src.url = 'http://amazon.jp/dp/' + asin;
                }
        }
        if(mouseDown.ctrlKey){
                str = '<a href="' + src.url + '" target="_blank">' + src.title + '</a>';
        } else {
                str =  src.title + '\n' + src.url;
        }
        var textarea = document.createElement("textarea");
        document.body.appendChild(textarea);
        textarea.value = str;
        textarea.select();
        textarea.focus();
        document.execCommand("copy");
        textarea.parentNode.removeChild(textarea);
});

注意:Foxy Gesturesの詳細設定で「clipboardWrite APIパーミッションの追加」が有効になっている必要があります。

Amazonの商品でトラッキングIDを埋め込みたい場合は
src.url = 'http://amazon.jp/dp/' + asin;

src.url = 'http://amazon.co.jp/o/ASIN/' + asin + '/トラッキングID/';
とすれば良いでしょう。

今回動作検証中に気づいたのですけれど、トラッキングIDを埋め込む場合、
2011年に検証したときはhttp://amazon.jp/o/ASIN/(asin)/(トラッキングID)/でもリンクの動作確認ツールは有効と判定されていたのですけれど
今回の検証ではhttp://amazon.co.jp/o/ASIN/(asin)/(トラッキングID)/でないとエラーになるようです。
これまで「.co」なしでリンクしていたので気になってレポートを確認したところ先週くらいにクリックがカウントされているので.coがなくても大丈夫そうですけど念のため付けときましょう。

あとショートURI検証中気づいたのですけど、Amazonは在庫切れとか場合によって「業者が販売」しているページが表示されることがあるのですが、URI末尾に/ref=sr_1_2&rps=1を追加(http://amazon.jp/dp/(asin)/ref=sr_1_2&rps=1)すれば「Amazonが販売、発送」のページが(あれば)表示されるようです。
数件しかテストしてないのでそうなるとは限りませんが「Amazonが販売、発送」ページを優先して表示させたいときには役に立つかもしれませんw


それにしてもほとんど知識のない状態で非同期だのPromiseだのチンプンカンプンだわ。
executeInBackgroundの中でdocument.getElementByIdが使えないみたいだし(気が付かなくてそこが一番苦労した)
Promiseを使う - JavaScript | MDNとか


続きを読む

[Firefox]
[Firefox Quantum]
[Script]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット