您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a button to Amazon book pages to redirect to Goodreads page based on ASIN/ISBN
- // ==UserScript==
- // @name Open in Goodreads
- // @namespace open-in-goodreads
- // @version 2.4
- // @description Adds a button to Amazon book pages to redirect to Goodreads page based on ASIN/ISBN
- // @match https://*.amazon.com/*
- // @match https://*.amazon.co.uk/*
- // @match https://*.amazon.com.au/*
- // @match https://*.amazon.com.be/*
- // @match https://*.amazon.com.br/*
- // @match https://*.amazon.ca/*
- // @match https://*.amazon.cn/*
- // @match https://*.amazon.eg/*
- // @match https://*.amazon.fr/*
- // @match https://*.amazon.de/*
- // @match https://*.amazon.in/*
- // @match https://*.amazon.it/*
- // @match https://*.amazon.co.jp/*
- // @match https://*.amazon.com.mx/*
- // @match https://*.amazon.nl/*
- // @match https://*.amazon.pl/*
- // @match https://*.amazon.sa/*
- // @match https://*.amazon.sg/*
- // @match https://*.amazon.es/*
- // @match https://*.amazon.se/*
- // @match https://*.amazon.com.tr/*
- // @match https://*.amazon.ae/*
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function () {
- 'use strict';
- function redirectToGoodreads() {
- var asinElements = document.getElementsByName('ASIN');
- if (asinElements.length === 0) asinElements = document.getElementsByName('ASIN.0');
- if (asinElements.length > 0) {
- const asin = asinElements[0].value;
- const goodreadsUrl = asin.match(/\D/) === null
- ? `http://www.goodreads.com/review/isbn/${asin}`
- : `https://www.goodreads.com/book/isbn?isbn=${asin}`;
- window.open(goodreadsUrl, '_blank');
- } else {
- alert("No ASIN or ISBN Found.");
- }
- }
- function addButton() {
- const imageBlockNew = document.getElementById('imageBlockNew_feature_div');
- const imageBlock = document.getElementById('imageBlock_feature_div');
- const booksImageBlock = document.getElementById('booksImageBlock_feature_div');
- // Only add button if one of the target image blocks is present
- if (imageBlockNew || booksImageBlock || imageBlock) {
- // Check for Publication date in the carousel section
- const carousel = document.querySelector('.a-carousel');
- const publicationDateExists = carousel && carousel.innerText.includes('Publication date');
- if (publicationDateExists) {
- const button = document.createElement('button');
- button.innerText = 'Open in Goodreads';
- button.style.cssText = `
- margin: 10px auto;
- display: block;
- color: #ffffff;
- background-color: #377458;
- border: none;
- border-radius: 4px;
- padding: 8px 12px;
- font-family: Arial, sans-serif;
- font-size: 14px;
- font-weight: bold;
- cursor: pointer;
- `;
- button.onclick = redirectToGoodreads;
- const centerDiv = document.createElement('div');
- centerDiv.style.textAlign = 'center';
- centerDiv.appendChild(button);
- // Insert the button after the image block
- if (imageBlockNew) imageBlockNew.parentNode.insertBefore(centerDiv, imageBlockNew.nextSibling);
- else if (booksImageBlock) booksImageBlock.parentNode.insertBefore(centerDiv, booksImageBlock.nextSibling);
- else if (imageBlock) imageBlock.parentNode.insertBefore(centerDiv, imageBlock.nextSibling);
- }
- }
- }
- // Observer to detect when the target elements are available
- const observer = new MutationObserver(() => {
- const imageBlockNew = document.getElementById('imageBlockNew_feature_div');
- const imageBlock = document.getElementById('imageBlock_feature_div');
- const booksImageBlock = document.getElementById('booksImageBlock_feature_div');
- if (imageBlockNew || booksImageBlock || imageBlock) {
- addButton();
- observer.disconnect(); // Stop observing once the button is added
- }
- });
- // Start observing for changes in the DOM
- observer.observe(document.body, { childList: true, subtree: true });
- })();