您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Creates a "Show questions" button for Amazon. Once clicked it opens a new tab of the questions.
当前为
- // ==UserScript==
- // @name Show Amazon Questions button + context menu
- // @author u/iNeedAProperAccount
- // @description Creates a "Show questions" button for Amazon. Once clicked it opens a new tab of the questions.
- // It also creates an "Open Questions tab" context menu entry, which also when clicked opens a new tab of the questions.
- // Thanks to u/CaptSkinny, u/lilgeeky, u/Sanpete_in_Utah and u/TTum.
- // How it looks like:
- // https://i.imgur.com/mZSLDun.png
- // https://i.imgur.com/GHmUuEM.png
- // Original thread at: https://old.reddit.com/r/AmazonVine/comments/14aynxt/are_product_question_and_answer_sections_gone/
- // @version 0.4
- // @license MIT
- // @match *://*.amazon.com/*
- // @match *://*.amazon.ca/*
- // @match *://*.amazon.com.mx/*
- // @match *://*.amazon.co.uk/*
- // @match *://*.amazon.fr/*
- // @match *://*.amazon.de/*
- // @match *://*.amazon.es/*
- // @match *://*.amazon.it/*
- // @match *://*.amazon.nl/*
- // @match *://*.amazon.se/*
- // @match *://*.amazon.pl/*
- // @match *://*.amazon.com.tr/*
- // @match *://*.amazon.ae/*
- // @match *://*.amazon.sa/*
- // @match *://*.amazon.co.jp/*
- // @match *://*.amazon.in/*
- // @match *://*.amazon.sg/*
- // @match *://*.amazon.com.au/*
- // @match *://*.amazon.com.br/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=amazon.ca
- // @grant GM_registerMenuCommand
- // @namespace https://greasyfork.org/users/877912
- // ==/UserScript==
- const PRODUCT_TITLE_SELECTOR = "span#productTitle";
- const REGEX_PATTERN = "^(http[s]?://[^/]+)/(?:.+?/)?(?:dp|gp/product|asin)/(?:.+?/)?([a-zA-Z0-9]{10})(?:[/?]|$)";
- function getQuestionsUrl() {
- try {
- const url = document.URL;
- const regex = new RegExp(REGEX_PATTERN, "i");
- const matches = url.match(regex);
- if (matches) {
- const scheme_and_host = matches[1];
- const asin = matches[2];
- if (scheme_and_host && asin) {
- return `${scheme_and_host}/ask/questions/asin/${asin}`;
- }
- }
- } catch (error) {
- console.error("Error in getQuestionsUrl:", error);
- }
- }
- function contextOpenQuestionsTab() {
- try {
- const questions_url = getQuestionsUrl();
- if (questions_url) {
- window.open(questions_url, '_blank');
- }
- } catch (error) {
- console.error("Error in contextOpenQuestionsTab:", error);
- }
- }
- function openQuestionsTab() {
- try {
- const questions_url = getQuestionsUrl();
- if (questions_url) {
- const reviewDiv = document.querySelector(PRODUCT_TITLE_SELECTOR);
- if (reviewDiv) {
- const button = document.createElement("button");
- button.innerHTML = "Show Questions";
- button.style.margin = '0.2rem 0.2rem 0.2rem 0rem';
- button.style.fontSize = '0.9rem';
- button.addEventListener("click", function () {
- window.open(questions_url, '_blank');
- });
- const brElement = document.createElement("br");
- reviewDiv.parentNode.insertBefore(brElement, reviewDiv.nextSibling);
- reviewDiv.parentNode.insertBefore(button, brElement.nextSibling);
- const brAfter = document.createElement("br");
- reviewDiv.parentNode.insertBefore(brAfter, button.nextSibling);
- GM_registerMenuCommand("Open Questions tab", contextOpenQuestionsTab, "a");
- }
- }
- } catch (error) {
- console.error("Error in openQuestionsTab:", error);
- }
- }
- const observer = new MutationObserver(function (mutations) {
- try {
- mutations.forEach(function (mutation) {
- if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
- for (let i = 0; i < mutation.addedNodes.length; i++) {
- const addedNode = mutation.addedNodes[i];
- if (addedNode.nodeType === 1 && addedNode.matches && addedNode.matches(PRODUCT_TITLE_SELECTOR)) {
- openQuestionsTab();
- break;
- }
- }
- }
- });
- } catch (error) {
- console.error("Error in MutationObserver:", error);
- }
- });
- const observerConfig = {
- childList: true,
- subtree: true
- };
- try {
- observer.observe(document.body, observerConfig);
- openQuestionsTab();
- } catch (error) {
- console.error("Error in script initialization:", error);
- }