Replace article URL with short Amazon permalink
// ==UserScript== // @name Amazon short URL // @namespace graphen // @version 4.2.0 // @description Replace article URL with short Amazon permalink // @author Graphen // @include /^https?:\/\/www\.amazon\.(cn|in|sg|ae|fr|de|pl|it|nl|es|ca|se|com(\.(mx|au|br|tr|be))?|co\.(uk|jp))\/.*(dp|gp\/(product|video)|exec\/obidos\/ASIN|o\/ASIN)\/.*$/ // @icon https://www.amazon.com/favicon.ico // @noframes // @grant none // @license MIT // ==/UserScript== /* jshint esversion: 6 */ (function (doc) { 'use strict'; function getAsin(){ let asinId = doc.getElementById('ASIN'); if (asinId && asinId.value.length === 10) { return asinId.value; } else { // Get ASIN from canonical link let links = doc.getElementsByTagName('link'); let i; for (i=0; i < links.length; i++) { if (links[i].rel === 'canonical') { let canonical = links[i].href; let asin = canonical.replace(/https?:\/\/www\.amazon\..*\/dp\/([\w]+)$/, '$1'); if (asin.length === 10) { return asin; } } } } } function replaceUrl() { let asin = getAsin(); if (asin){ history.replaceState(null, 'Amazon URL Cleaner', '/dp/' + asin + '/'); //console.log("URL replaced by Amazon URL Cleaner. ASIN: " + asin); } } replaceUrl(); // Execute again when item variation is selected var buyboxParent = doc.getElementById('desktop_buybox'); if (buyboxParent) { var MO = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { mutation.addedNodes.forEach(function(nodeElement) { if (nodeElement.id === "buybox") { replaceUrl(); } }); }); }); MO.observe(buyboxParent, { childList: true, subtree: true }); } // Clear dynamically added URL parameters function checkUrlParameters(){ if(window.location.search !== '') { window.history.replaceState(window.history.state, "", window.location.origin + window.location.pathname); } } setInterval(checkUrlParameters, 1000); }) (document);