From 7d5e22931778f397f75f490d927fe15495d46477 Mon Sep 17 00:00:00 2001 From: Les De Ridder Date: Thu, 5 May 2016 16:20:50 +0200 Subject: [PATCH] Add experimental Pixiv support --- background.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ manifest.json | 4 +++- options.html | 1 - 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/background.js b/background.js index fd129f1..5d4e88f 100644 --- a/background.js +++ b/background.js @@ -114,11 +114,55 @@ function getBetterUrl(url, callback) { callback(baseurl + '/' + filename); }; request.send(); + } else if(isPixivUrl(url)) { + //TODO: Use a content script instead of re-fetching the page + + var pageRequest = new XMLHttpRequest(); + pageRequest.open('GET', url, true); + pageRequest.onload = function () { + var regex = /
/g; + + var match = regex.exec(pageRequest.responseText); + + var imageUrl = 'http://i3.pixiv.net/img-original/' + match[1] + match[2]; + + var imageRequest = new XMLHttpRequest(); + imageRequest.open('GET', imageUrl, true); + imageRequest.setRequestHeader('X-Pixiv-Referer', url); + imageRequest.onload = function () { + callback(imageUrl); + }; + imageRequest.send(); + }; + pageRequest.send(); } else { callback(url); } } +chrome.webRequest.onBeforeSendHeaders.addListener( + function(details) { + if(details.url.indexOf('pixiv') != -1) { + for (var i = 0; i < details.requestHeaders.length; ++i) { + if (details.requestHeaders[i].name === 'X-Pixiv-Referer') { + var referer = details.requestHeaders[i].value; + details.requestHeaders.splice(i, 1); + break; + } + } + + details.requestHeaders.push({ + name: 'Referer', + value: referer + }); + } + + return {requestHeaders: details.requestHeaders}; + }, + {urls: ["*://*/*"], types: ["xmlhttprequest"]}, + ["blocking", "requestHeaders"] +); + function cleanExtension(url) { var trailingStrings = ["?", ":orig", ":large", ":small", ":thumb", ":medium"]; @@ -135,6 +179,10 @@ function isInstagramUrl(url) { return url.indexOf('instagram.com/p') != -1; } +function isPixivUrl(url) { + return url.indexOf('pixiv.net/member_illust.php') != -1; +} + function isCoolUrl(url, callback) { url = url.toLowerCase(); diff --git a/manifest.json b/manifest.json index 819abf7..411ecc1 100644 --- a/manifest.json +++ b/manifest.json @@ -24,6 +24,8 @@ "storage", "http://*/*", "https://*/*", - "bookmarks" + "bookmarks", + "webRequest", + "webRequestBlocking" ] } diff --git a/options.html b/options.html index 47c78b2..1a207d1 100644 --- a/options.html +++ b/options.html @@ -46,7 +46,6 @@