Greasy Fork

Greasy Fork is available in English.

Amazon.co.jpの商品ページに各種リンク追加

Amazon.co.jpの商品ページに固定URL、サクラチェッカー、keepaなどのリンクを追加します

当前为 2022-08-13 提交的版本,查看 最新版本

// ==UserScript==
// @name         Amazon.co.jpの商品ページに各種リンク追加
// @namespace    https://www.amazon.co.jp/dp/
// @version      1.5
// @description  Amazon.co.jpの商品ページに固定URL、サクラチェッカー、keepaなどのリンクを追加します
// @match        https://www.amazon.co.jp/dp/*
// @match        https://www.amazon.co.jp/*/dp/*
// @match        https://www.amazon.co.jp/gp/product/*
// @match        https://www.amazon.co.jp/*/ASIN/*
// @license      MIT
// @author       nanashi <[email protected]>
// ==/UserScript==

(() => {
    "use strict";

    // フレーム内(iframeなど)なら終了
    if(window != window.parent) return;

    const mainFunction = () => {
        // すでに追加済みなら終了
        if(document.getElementById("various_links")) return;

        // ASIN取得
        let asin = null;
        let element_asin = document.getElementById("ASIN");
        if(element_asin){
            let t = String(element_asin.getAttribute("value")).match(/[0-9A-Za-z]{10}/);
            if(t) asin = t[0];
        }
        if(!asin){
            let t = location.href.match(/\/(dp|gp\/product|ASIN)\/([0-9A-Za-z]{10})/);
            if(t) asin = t[2];
        }
        if(!asin) return;

        // 追加先取得
        let element_buybox = document.getElementById("buybox");
        if(!element_buybox) return;

        // 追加要素作成
        const div_outer = document.createElement("div");
        div_outer.id = "various_links";
        div_outer.style.marginTop = "0.5em";

        // 固定URL
        const div_fix = document.createElement("div");
        const a_fix = document.createElement("a");
        a_fix.setAttribute("href", "https://www.amazon.co.jp/dp/" + asin + "/");
        a_fix.textContent = "固定URL";
        div_fix.appendChild(a_fix);
        div_outer.appendChild(div_fix);

        // サクラチェッカー
        const div_sakura = document.createElement("div");
        const a_sakura = document.createElement("a");
        a_sakura.setAttribute("href", "https://sakura-checker.jp/search/" + asin + "/");
        a_sakura.setAttribute("target", "_blank");
        a_sakura.textContent = "サクラチェッカーで検索";
        div_sakura.appendChild(a_sakura);
        div_outer.appendChild(div_sakura);

        // keepa
        const div_keepa = document.createElement("div");
        const a_keepa = document.createElement("a");
        a_keepa.setAttribute("href", "https://keepa.com/#!product/5-" + asin);
        a_keepa.setAttribute("target", "_blank");
        a_keepa.textContent = "keepaで検索";
        div_keepa.appendChild(a_keepa);
        div_outer.appendChild(div_keepa);

        // 作成した要素を追加
        element_buybox.parentNode.insertBefore(div_outer, element_buybox.nextElementSibling);
    };

    let desktop_buybox = document.getElementById("dsv_buybox_desktop");
    if(!desktop_buybox) desktop_buybox = document.getElementById("desktop_buybox_feature_div");
    if(!desktop_buybox) desktop_buybox = document.getElementById("desktop_buybox");
    if(!desktop_buybox) desktop_buybox = document.getElementById("combinedBuyBox");
    if(!desktop_buybox) return;
    (new MutationObserver(mainFunction)).observe(desktop_buybox, {childList:true});
    mainFunction();
})();