アナログ
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”のレガシーアドオンのミラーリングが完了
気になるのは派生ブラウザの開発リソースもだけれど、アドオンの開発も続くのだろうか?
分散して消滅とかやだなぁ。

Foxy Gestures:Twitterの画像を原寸大で新しいタブで開く2018/09/21 18:54

レガシーアドオンのためにESRに逃げていたのですけれど、とうとう逃げ切れなくなりましたので、試しにQuantumを入れて様子を見ることにしました。

先ずは操作性から元の環境に近づけるべくFoxy Gesturesを導入。

スクリプトをどうしたものかと考えていたら
Firefox 57(Quantum)で動かなくなった「FireGestures」の代替に選ばれたのは、「Foxy Gestures」と往年の名ソフトでした。
でサンプルスクリプトまで解説付きで公開してくれてるので、ありがてぇありがてぇとばがりにパク、もとい参考に手をいれてみましたw

var src = data.element.mediaInfo && data.element.mediaInfo.source;
var lnk = data.element.linkHref || src;
if (src) {
    if  ((src.split('/')[2] == 'pbs.twimg.com')
      && ((src.split('/')[3] == 'media') || (src.split('/')[3] == 'card_img'))) {
	if  (mouseDown.ctrlKey) {
	    src = lnk;
	}
	src = src.replace( /small|([0-9]+x[0-9]+|large|medium|thumb|orig).*$/, 'orig');
    } else {
	if  (!(mouseDown.ctrlKey)) {
	    src = lnk;
	}
    }
} else {
    src = lnk;
}
if (src) {
    executeInBackground((src, alt) => {
	getActiveTab(tab => browser.tabs.create({
	  url: src,
	  index: tab.index,
	  active: !(alt)
	}));
    }, [ src, mouseDown.altKey ]);
}

ということで、FireGestures:Twitterの画像を原寸大で新しいタブで開くはQuantumでも解決と。

それにしてもブックマークのタグ検索とスマートブックマークのqueryを編集するインターフェイスがない(なんでURIを隠すのか)のがなぁ……




ずいぶんご無沙汰してましたが、覚書はブログの方が便利(ググれるのでw)なもので腱鞘炎をおして更新っとw
年をとるとあっちこっちガタガタで困ったものです。


追記(10/21)

画像のリンク先(大きな画像がリンクされてたりとか)も同じジェスチャーで開きたいと思ったので、ちょこっと書き足し

画像でなくてもリンク先を新しいタブに開くのでなかなか重宝している。


追記(10/24)

Ctrlキーを押しながらジェスチャーすると改造前のようにジェスチャー上の画像を新しいタブに開きます。
これで元のソースを残す必要もないので上書きしました。


追記(10/29)

altキーでバックグラウンドで開くようになります。
一般設定で「Altキーを押している間はジェスチャーを無効にする」のチェックを外す必要があります。

本当はバックグラウンドで開くときはアクティブタブの右に開きたいのですが、続けてバックグラウンドで開くときに先に開いたタブの右に開く方法が分からない(中クリックでリンク先を次々に開くのと同じようにできない)ので今は左に開くようにしています。


追記(2020/1/29)

Twitterの仕様が変わったので対応
でもサムネイルからオリジナルサイスを開くにはCtrlキーを押しながらジェスチャーする必要があります。
Ctrlキーを押したくないという方は
一行目の
src = data.element.linkHref;
と三行目の
src = data.element.mediaInfo && data.element.mediaInfo.source;
を入れ替えるといいです。

追記(2020/2/3)

やはり、いちいちCtrlキーを押すのが面倒だったのでw
・Twitterの画像上でジェスチャーするとオリジナルサイズの画像を新しいタブに開く
(この時Ctrlキーが押されていれば画像に設定されたリンク先を新しいタブに開く)
・それ以外の文字や画像リンク上でジェスチャーするとリンク先を新しいタブに開く
(この時Ctrlキーが押されていればジェスチャーした時の画像を新しいタブに開く)
なんだか説明すると複雑ですが元のスクリプトより快適に使えてます。

追記(2020/2/11)

url変換部分にelseいらんよなぁって削除
var lnk = data.element.linkHref;
if (!(lnk)) {
lnk = src;
}

var lnk = data.element.linkHref || src;
一行で済むと知ってさっそく置き換えw