在您安裝前,Greasy Fork镜像希望您了解本腳本包含“可能不受歡迎的功能”,可能幫助腳本的作者獲利,而不能給你帶來任何收益。
此腳本內的代碼會追蹤您的瀏覽行為。
腳本的作者解釋:
Third-party site can collect/store/guess what you are going to purchase.
A non-intrusive way to display Amazon UK item's history price, featuring third-party price history.
- // ==UserScript==
- // @name Price History - Amazon UK
- // @description A non-intrusive way to display Amazon UK item's history price, featuring third-party price history.
- // @version 1.0.3
- // @name:zh-CN 价格历史 - 亚马逊英国
- // @description:zh-CN 以非侵入式的方式来展示亚马逊英国商品的历史价格,使用第三方价格服务。
- // @antifeature tracking Third-party site can collect/store/guess what you are going to purchase.
- // @antifeature:zh-CN tracking 第三方网站可能会搜集、储存或推测你将要购买的物品。
- // @namespace uk.jixun
- // @match https://amazon.co.uk/*
- // @match https://www.amazon.co.uk/*
- // @match https://smile.amazon.co.uk/*
- // @author Jixun
- // @license bsd-3-clause
- // @run-at document-start
- // @grant none
- // ==/UserScript==
- let serviceEl = [];
- const services = [{
- name: 'CCC',
- inline: false,
- url: asin => `https://uk.camelcamelcamel.com/product/${asin}`,
- }, {
- name: 'Keepa',
- inline: asin => () => {
- const prevImage = $('keepa-history-embed');
- if (prevImage) {
- prevImage.style.display = prevImage.style.display === 'none' ? 'block' : 'none';
- return;
- }
- const src = `https://graph.keepa.com/pricehistory.png?asin=${asin}&domain=co.uk`;
- const $img = h('img', {src, id: 'keepa-history-embed', 'referrerPolicy': 'no-referrer'});
- const $price = $('price');
- if ($price) {
- $price.parentNode.insertBefore($img, $price.nextSibling);
- } else {
- $('olp_feature_div').appendChild($img);
- }
- serviceEl.push($img);
- },
- url: asin => `https://keepa.com/#!product/2-${asin}`,
- }];
- const serviceStyle = {
- 'marginRight': '0.5em',
- 'display': 'inline-block',
- };
- const inlineStyle = {
- background: 'none',
- border: 'none',
- };
- function insertServices(asin) {
- return services.map(service => h('li', { style: serviceStyle }, [
- service.url && h('a', { href: service.url(asin), target: '_blank', rel: 'noreferrer' }, [service.name]),
- !service.url && h('span', null, [service.name]),
- service.inline && h('span', null, [
- ' (',
- h('a', { href: 'javascript:void(0)', onclick: service.inline(asin) }, 'inline'),
- ')',
- ])
- ]));
- }
- function $(id) {
- return document.getElementById(id);
- }
- function insertChildren(root, children = []) {
- if (!children) return;
- if (Array.isArray(children)) {
- for (const c of children) {
- insertChildren(root, c);
- }
- return;
- }
- if (typeof children === 'string') {
- children = document.createTextNode(children);
- }
- root.appendChild(children);
- }
- function h(tag, attr, ...children) {
- const el = document.createElement(tag);
- if (attr) {
- for(const [name, value] of Object.entries(attr)) {
- if (name === 'style') {
- Object.assign(el.style, value);
- } else {
- el[name] = value;
- }
- }
- }
- insertChildren(el, children);
- return el;
- }
- function remove(node) {
- node?.parentNode?.removeChild(node);
- }
- let lastRoot;
- function injectPriceCompare() {
- const $asin = $('ASIN');
- if (!$asin || $asin.tagName !== 'INPUT') {
- console.info('asin not found.');
- return;
- }
- // clean up
- serviceEl.forEach(remove);
- const asin = $asin.value;
- const $priceTable = document.querySelector('#price table > tbody') || $('olp_feature_div');
- const root = h('tr', null, [
- h('td', { className: 'a-color-secondary' }, ['History']),
- h('td', null, [
- h('ul', { style: {cssText: 'margin:0'} }, insertServices(asin)),
- ])
- ]);
- $priceTable.appendChild(root);
- serviceEl = [root];
- }
- function init() {
- const root = $('desktop_buybox');
- if (!root) {
- return;
- }
- const observer = new MutationObserver((mutationsList, observer) => {
- for(const {removedNodes} of mutationsList) {
- console.info(removedNodes);
- if (!removedNodes) continue;
- for (const node of removedNodes) {
- if (node.id === 'buybox') {
- injectPriceCompare();
- return;
- }
- }
- }
- });
- // Start observing the target node for configured mutations
- observer.observe(root, { childList: true });
- injectPriceCompare();
- }
- addEventListener('DOMContentLoaded', init);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址