您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a button to archive the page on Archive.today for specific websites
- // ==UserScript==
- // @name Unpaywall Button
- // @license MIT
- // @namespace http://tampermonkey.net/
- // @version 1.0
- // @description Adds a button to archive the page on Archive.today for specific websites
- // @author Your Name
- // @include *://cnn.com/*
- // @include *://*.cnn.com/*
- // @include *://bbc.com/*
- // @include *://*.bbc.com/*
- // @include *://nytimes.com/*
- // @include *://*.nytimes.com/*
- // @include *://foxnews.com/*
- // @include *://*.foxnews.com/*
- // @include *://huffpost.com/*
- // @include *://*.huffpost.com/*
- // @include *://reuters.com/*
- // @include *://*.reuters.com/*
- // @include *://bloomberg.com/*
- // @include *://*.bloomberg.com/*
- // @include *://theguardian.com/*
- // @include *://*.theguardian.com/*
- // @include *://forbes.com/*
- // @include *://*.forbes.com/*
- // @include *://usatoday.com/*
- // @include *://*.usatoday.com/*
- // @include *://npr.org/*
- // @include *://*.npr.org/*
- // @include *://washingtonpost.com/*
- // @include *://*.washingtonpost.com/*
- // @include *://aljazeera.com/*
- // @include *://*.aljazeera.com/*
- // @include *://abcnews.go.com/*
- // @include *://*.abcnews.go.com/*
- // @include *://cbsnews.com/*
- // @include *://*.cbsnews.com/*
- // @include *://nbcnews.com/*
- // @include *://*.nbcnews.com/*
- // @include *://news.yahoo.com/*
- // @include *://*.news.yahoo.com/*
- // @include *://latimes.com/*
- // @include *://*.latimes.com/*
- // @include *://politico.com/*
- // @include *://*.politico.com/*
- // @include *://wsj.com/*
- // @include *://*.wsj.com/*
- // @include *://thehill.com/*
- // @include *://*.thehill.com/*
- // @include *://vox.com/*
- // @include *://*.vox.com/*
- // @include *://buzzfeednews.com/*
- // @include *://*.buzzfeednews.com/*
- // @include *://time.com/*
- // @include *://*.time.com/*
- // @include *://cnbc.com/*
- // @include *://*.cnbc.com/*
- // @include *://businessinsider.com/*
- // @include *://*.businessinsider.com/*
- // @include *://axios.com/*
- // @include *://*.axios.com/*
- // @include *://slate.com/*
- // @include *://*.slate.com/*
- // @include *://newyorker.com/*
- // @include *://*.newyorker.com/*
- // @include *://vanityfair.com/*
- // @include *://*.vanityfair.com/*
- // @include *://nationalreview.com/*
- // @include *://*.nationalreview.com/*
- // @include *://dailywire.com/*
- // @include *://*.dailywire.com/*
- // @include *://drudgereport.com/*
- // @include *://*.drudgereport.com/*
- // @include *://breitbart.com/*
- // @include *://*.breitbart.com/*
- // @include *://theatlantic.com/*
- // @include *://*.theatlantic.com/*
- // @include *://newyorkpost.com/*
- // @include *://*.newyorkpost.com/*
- // @include *://independent.co.uk/*
- // @include *://*.independent.co.uk/*
- // @include *://telegraph.co.uk/*
- // @include *://*.telegraph.co.uk/*
- // @include *://dailymail.co.uk/*
- // @include *://*.dailymail.co.uk/*
- // @include *://express.co.uk/*
- // @include *://*.express.co.uk/*
- // @include *://mirror.co.uk/*
- // @include *://*.mirror.co.uk/*
- // @include *://thesun.co.uk/*
- // @include *://*.thesun.co.uk/*
- // @include *://metro.co.uk/*
- // @include *://*.metro.co.uk/*
- // @include *://sky.com/*
- // @include *://*.sky.com/*
- // @include *://euronews.com/*
- // @include *://*.euronews.com/*
- // @include *://rt.com/*
- // @include *://*.rt.com/*
- // @include *://france24.com/*
- // @include *://*.france24.com/*
- // @include *://dw.com/*
- // @include *://*.dw.com/*
- // @include *://ctvnews.ca/*
- // @include *://*.ctvnews.ca/*
- // @include *://globalnews.ca/*
- // @include *://*.globalnews.ca/*
- // @include *://cbc.ca/*
- // @include *://*.cbc.ca/*
- // @grant GM.xmlHttpRequest
- // @run-at document-end
- // ==/UserScript==
- (function() {
- 'use strict';
- const hostnames = [
- 'archive.is',
- 'archive.ph',
- 'archive.today',
- 'archive.fp',
- 'archive.li',
- 'archive.md',
- 'archive.vn'
- ];
- function sleep(t) {
- return new Promise(resolve => setTimeout(resolve, t));
- }
- function checkAvailability(hostname) {
- return new Promise(function(resolve, reject) {
- const onResponse = function(response) {
- if ((response.status >= 200 && response.status <= 400) || response.status === 429) {
- resolve(response);
- } else {
- reject(new Error('HOST_UNAVAILABLE'));
- }
- };
- GM.xmlHttpRequest({
- url: `https://${hostname}/`,
- method: 'GET',
- headers: {
- Range: 'bytes=0-63'
- },
- onload: onResponse,
- onerror: onResponse
- });
- });
- }
- async function archivePage(url) {
- let workingHostname = null;
- for (const hostname of hostnames) {
- try {
- await checkAvailability(hostname);
- workingHostname = hostname;
- break;
- } catch (err) {
- if (err && 'message' in err && err.message === 'HOST_UNAVAILABLE') {
- console.debug(`${hostname} is NOT available`);
- } else {
- throw err;
- }
- }
- }
- if (workingHostname) {
- document.location.href = `https://${workingHostname}/?run=1&url=${encodeURIComponent(url)}`;
- } else {
- alert('All Archive.today domains seem to be down.');
- }
- }
- function createButton() {
- const button = document.createElement('button');
- button.innerText = 'Unpaywall';
- button.style.position = 'fixed';
- button.style.bottom = '10px';
- button.style.right = '10px';
- button.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
- button.style.color = 'white';
- button.style.border = 'none';
- button.style.borderRadius = '5px';
- button.style.padding = '10px';
- button.style.cursor = 'pointer';
- button.style.zIndex = '10000';
- button.style.opacity = '0.8';
- button.addEventListener('click', () => archivePage(window.location.href));
- document.body.appendChild(button);
- }
- function main() {
- console.log('Unpaywall script running');
- createButton();
- }
- main();
- })();