问题
I'm looking to make a Greasemonkey script that will replace the images in Tumblr, Pinterest, Flickr, Facebook, and Webstagram RSS feeds with larger versions in InoReader.
I had been successfully using the following scripts in Google Reader for Tumblr and Pinterest. Would like to port them over to InoReader and combine them all into a single script.
Old Google Reader Tumblr script:
// ==UserScript==
// @name Big Photos from Tumblr on Google Reader
// @include http://*.google.com/reader/view/*
// @include https://*.google.com/reader/view/*
// ==/UserScript==
document.getElementById("chrome").addEventListener("DOMNodeInserted", function (e) {
if (e.target.tagName && e.target.tagName == "DIV" && /entry\s?/.test(e.target.className)) {
var t = e.target.getElementsByTagName("img");
for (var n in t) {
var r = t[n];
r.style.maxHeight = "1080px";
var i = r.src;
if (i.indexOf("tumblr") > -1) {
r.src = r.src.replace("_500.jpg", "_1280.jpg");
r.onerror = function () {
this.src = this.src.replace("_1280.jpg", "_500.jpg")
}
}
}
}
}, false)
Old Google Reader Pinterest Script:
// ==UserScript==
// @id greader-pinteresturlreplacer
// @name Google Reader - Pinterest URL Replacer
// @version 1.3
// @include https://www.google.com/reader/*
// ==/UserScript==
document.getElementById("chrome").addEventListener("DOMNodeInserted", function (e) {
var t = e.target;
if (t.tagName && t.tagName == "DIV" && /entry\b/i.test(t.className)) {
var n = t.getElementsByTagName("img");
for (var r in n) {
var i = n[r];
if (/pinterest\.com.*_b\.\w+$/.test(i.src) || /pinterest\.com\/192x\//.test(i.src)) {
i.style.width = "inherit";
i.style.height = "inherit";
i.src = i.src.replace(/_b\.(\w+)$/, ".$1");
i.src = i.src.replace(/\.com\/192x\//, ".com/550x/")
}
}
}
}, false);
document.getElementById("chrome").addEventListener("DOMNodeInserted", function (e) {
var t = e.target;
if (t.tagName && t.tagName == "DIV" && /entry\b/i.test(t.className)) {
var n = t.getElementsByTagName("img");
for (var r in n) {
var i = n[r];
if (/pinimg\.com.*_b\.\w+$/.test(i.src) || /pinimg\.com\/192x\//.test(i.src)) {
i.style.width = "inherit";
i.style.height = "inherit";
i.src = i.src.replace(/_b\.(\w+)$/, ".$1");
i.src = i.src.replace(/\.com\/192x\//, ".com/550x/")
}
}
}
}, false)
The following are working Greasemonkey InoReader scripts for Facebook, Webstagram, and Flickr.
InoReader Facebook:
// ==UserScript==
// @id inoreaderfacebookthumbs
// @name InoReader Facebook Thumbnail Replacer
// @version 1.0
// @include https://inoreader.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
/* Facebook Thumbnails */
waitForKeyElements (
"#reader_pane div.article_full_contents div.article_content a.underlink img",
swapOutFbcdnThumnails
);
function swapOutFbcdnThumnails (jNode) {
/*-- Change src from:
https://fbcdn-photos- ... _s.jpg
to:
https://fbcdn-sphotos- ... _n.jpg
*/
var newSrc = jNode[0].src.replace (/fbcdn\-photos\-/, "fbcdn-sphotos-");
newSrc = newSrc.replace (/_s\.jpg$/, "_n.jpg");
jNode[0].src = newSrc;
}
InoReader Webstagram:
// ==UserScript==
// @id inoreaderwebstagramthumbs
// @name InoReader Webstagram Thumbnail Replacer
// @version 1.0
// @include https://inoreader.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/* Webstagram Thumbnails */
waitForKeyElements (
"#reader_pane div.article_full_contents div.article_content a.underlink img",
swapOutWebstgmThumnails
);
function swapOutWebstgmThumnails (jNode) {
/*-- Change src from:
https://*.amazonaws.com ... _6.jpg
to:
https://*.amazonaws.com ... _7.jpg
*/
var newSrc = jNode[0].src.replace (/amazonaws/, "amazonaws");
newSrc = newSrc.replace (/_6\.jpg$/, "_7.jpg");
jNode[0].src = newSrc;
}
InoReader Flickr:
// ==UserScript==
// @id inoreaderflickrthumbsreplacer
// @name InoReader Flickr Thumbnail Replacer
// @version 1.0
// @include https://inoreader.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/* Flickr Thumbnails */
waitForKeyElements (
"#reader_pane div.article_full_contents div.article_content a.underlink img",
swapOutFlickrThumnails
);
function swapOutFlickrThumnails (jNode) {
/*-- Change src from:
https://*.staticflickr ... _m.jpg
to:
https://*.staticflickr ... _b.jpg
*/
var newSrc = jNode[0].src.replace (/staticflickr/, "staticflickr");
newSrc = newSrc.replace (/_m\.jpg$/, "_b.jpg");
jNode[0].src = newSrc;
}
Here are some sample RSS feeds for each: Tumblr, Flickr, Pinterest, Facebook, Webstagram
How do I merge these scripts? Thanks in advance.
回答1:
Forget the older 2 scripts. They use DOMNodeInserted which is deprecated.
Merging the InoReader.com scripts is easy. They all use the same selector for waitForKeyElements(), so merely use if() statements to determine which regex to apply in the callback function.
Something like this should do it:
// ==UserScript==
// @name InoReader Thumbnail Replacer
// @version 1.0
// @include http://inoreader.com/*
// @include http://www.inoreader.com/*
// @include https://inoreader.com/*
// @include https://www.inoreader.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
waitForKeyElements (
"#reader_pane div.article_full_contents div.article_content a.underlink img",
swapOutThumbnails
);
function swapOutThumbnails (jNode) {
var imgSrc = jNode[0].src;
//-- The necessary regex changes depending on where the images are hosted.
if (/staticflickr/.test (imgSrc) ) {
/*-- Change src from: https://*.staticflickr ... _m.jpg
to: https://*.staticflickr ... _b.jpg
*/
imgSrc = imgSrc.replace (/_m\.jpg$/, "_b.jpg");
}
else if (/amazonaws/.test (imgSrc) ) {
/*-- Change src from: https://*.amazonaws.com ... _6.jpg
to: https://*.amazonaws.com ... _7.jpg
*/
imgSrc = imgSrc.replace (/_6\.jpg$/, "_7.jpg");
}
else if (/fbcdn\-photos/.test (imgSrc) ) {
/*-- Change src from: https://fbcdn-photos- ... _s.jpg
to: https://fbcdn-sphotos- ... _n.jpg
*/
imgSrc = imgSrc.replace (/fbcdn\-photos\-/, "fbcdn-sphotos-");
imgSrc = imgSrc.replace (/_s\.jpg$/, "_n.jpg");
}
else if (/pinimg\.com.*_b\.\w+$/.test (imgSrc) || /pinimg\.com\/192x\//.test (imgSrc) ) {
/*-- Change src from: http://*.pinimg.com/192x/...
to: http://*.pinimg.com/550x/...
*/
imgSrc = imgSrc.replace(/\.com\/192x\//, ".com/550x/");
}
else if (/pinterest\.com.*_b\.\w+$/.test (imgSrc) || /pinterest\.com\/192x\//.test (imgSrc) ) {
/*-- Change src from: http://*.pinterest.com/192x/...
to: http://*.pinterest.com/550x/...
*/
imgSrc = imgSrc.replace(/\.com\/192x\//, ".com/550x/");
}
jNode[0].src = imgSrc;
}
/* Tumblr */
waitForKeyElements (
"#reader_pane div.article_full_contents div.article_content img", swapOutThumbnails2
);
function swapOutThumbnails2 (jNode) {
var imgSrc = jNode[0].src;
if (/tumblr/.test (imgSrc)) {
imgSrc = imgSrc.replace (/_500\.jpg$/, "_1280.jpg");
jNode[0].addEventListener ("error", tumblrImgErrFix, false);
}
jNode[0].src = imgSrc;
}
function tumblrImgErrFix () {
this.src = this.src.replace ("_1280.jpg", "_500.jpg");
console.log ("*** Img Err fix.");
}
来源:https://stackoverflow.com/questions/17439306/replace-tumblr-pinterest-flickr-images-with-larger-versions-in-inoreader-rss