アナログ
RSS  

Foxy GesturesでMake Link代替2018/11/13 00:50

これまで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とかPromise.prototype.then() - JavaScript | MDNとかピントこなかったorz
Waterfoxに逃げるべきかいまだに迷う……
「Waterfox」v56.2.3が公開 ~“Add-ons for Firefox”のレガシーアドオンのミラーリングが完了
気になるのは派生ブラウザの開発リソースもだけれど、アドオンの開発も続くのだろうか?
分散して消滅とかやだなぁ。