Amaznorm
by
noromanba
2018-06-16 [2018/06/16 01:46:55]
normalize redundant url/canonical on www.amazon.tld
/*
* @title Amaznorm
* @description normalize redundant canonical on www.amazon.tld
* @include http://www.amazon.tld/*
* @include https://www.amazon.com/*
* @include http://www.amazon.com.br/*
* @license MIT License http://opensource.org/licenses/MIT
* @javascript_url
*/
// ready to use @runat document-body
// UserScript
// https://gist.github.com/noromanba/da0de2ed47a381ee8c1e
// e.g.
// http://www.amazon.co.jp/COOKPAD-Inc-%E3%82%AF%E3%83%83%E3%82%AF%E3%83%91%E3%83%83%E3%83%89-No-1%E3%83%AC%E3%82%B7%E3%83%94%E6%A4%9C%E7%B4%A2%E3%82%A2%E3%83%97%E3%83%AA/dp/B00G9THZCW/
// to
// http://www.amazon.co.jp/dp/B00G9THZCW
(function () {
if (!/www\.amazon\.[\a-z]{2,}(?:\.[\a-z]{2})*/.test(location.hostname) ||
location.pathname.split('/').length < 3) { // XXX strict assert
return;
}
var canon = (document.head.querySelector('link[rel="canonical"][href]') || {});
if (!canon || !canon.href) return;
// redundant canonical syntax;
// http://www.amazon.<TLD>/<URL_ENCODED_ITEM_NAME>/dp/<ASIN>
var norm = [
location.origin,
'/',
new URL(canon.href).pathname.split('/').slice(-2).join('/')
].join('');
canon.href = norm; // avoid canonical mismatch
/*
window.history.replaceState(null, null, norm);
/*/
window.history.pushState(null, null, norm);
//*/
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。