ww.soundsnap.com 铃声免费下载
// HookAjax Test! example user script
// version 0.1 BETA!
// 2018-07-02
// Copyright (c) 2018, 安静的猫
// Released under the GPL license
//
// --------------------------------------------------------------------
//
// This is a Greasemonkey user script.
//
// To install, you need Greasemonkey: http://greasemonkey.mozdev.org/
// Then restart Firefox and revisit this script.
// Under Tools, there will be a new menu item to "Install User Script".
// Accept the default configuration and install.
//
// To uninstall, go to Tools/Manage User Scripts,
// select "HookAjax Test", and click Uninstall.
//
// --------------------------------------------------------------------
//
// ==UserScript==
// @name HookAjax Test
// @namespace http://diveintogreasemonkey.org/download/
// @description ww.soundsnap.com 铃声免费下载
// @require http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js
// @require https://unpkg.com/ajax-hook/dist/ajaxhook.min.js
// @include *
// @exclude http://diveintogreasemonkey.org/*
// @exclude http://www.diveintogreasemonkey.org/*
// @run-at document-end
// @version 0.1.201807021811
// ==/UserScript==
(function () {
'use strict';
var regSound = 'www.soundsnap.com';
hookAjax({
onreadystatechange: function(xhr) {
console.log("onreadystatechange called: %O", xhr)
//return true
},
onload: function(xhr) {
console.log("onload called: %O", xhr)
xhr.responseText = "hook" + xhr.responseText;
//return true;
},
open: function(arg, xhr) {
console.log("open called: method:%s,url:%s,async:%s", arg[0], arg[1], arg[2], xhr)
// arg[1] += "?hook_tag=1";
//统一添加请求头
},
send: function(arg, xhr) {
console.log("send called: %O", arg[0])
xhr.setRequestHeader("_custom_header_", "ajaxhook")
},
setRequestHeader: function(arg, xhr) {
console.log("setRequestHeader called!", arg)
}
});
if (location.host === regSound) {
createDownloadAllElement();
var items = document.getElementsByClassName("wave");
var parentsItems = document.getElementsByClassName("ojoo-teaser");
if (items.length > 0) {
for (var i = 0; i < items.length; i++) {
var curChild = getChildrenByName(items[i], 'audio');
if (curChild && curChild.length > 0) {
// var src = curChild[0].getAttribute('src')
var src = curChild[0].src;
var btn = createElement(src);
parentsItems[i].style.position = 'relative';
parentsItems[i].appendChild(btn)
}
}
}
}
function getChildrenByName(curEle, tagName) {
var nodeList = curEle.childNodes;
var ary = [],
resultChild = [];
if (/MSIE(6|7|8)/.test(navigator.userAgent)) {
for (var i = 0; i < nodeList.length; i++) {
var curNode = nodeList[i];
if (curNode.nodeType === 1) {
ary[ary.length] = curNode;
}
}
} else {
ary = Array.prototype.slice.call(curEle.children);
}
// 获取指定子元素
if (typeof tagName === "string") {
for (var k = 0; k < ary.length; k++) {
var curTag = ary[k];
if (curTag.nodeName.toLowerCase() === tagName.toLowerCase()) {
resultChild.push(ary[k])
}
}
}
return resultChild;
}
function createElement(src) {
var ele = document.createElement("a");
ele.setAttribute("href", src);
ele.setAttribute("target", '_blank');
ele.setAttribute("class", 'download-link');
ele.style.color = "blue";
ele.text = "下载";
ele.style.position = 'absolute';
ele.style.bottom = '44px';
ele.style.left = '0px';
return ele;
}
function createDownloadAllElement() {
var button = document.createElement("button");
button.setAttribute("type", "button");
button.setAttribute("class", "my-btn");
button.setAttribute("value", "下载全部");
button.setAttribute("onClick", "var itemsLink = document.getElementsByClassName('download-link'); if (itemsLink && itemsLink.length > 0) { for (var i = 0; i < itemsLink.length; i++) {itemsLink[i].click(); } }");
button.style.width = "60px";
button.style.height = "20px";
button.style.borderRadius = "2px";
button.style.align = "center";
button.style.marginBottom = "4px";
button.style.background = "#b46300";
button.style.border = "1px solid #b46300";
button.style.color = "white";
button.style.position = 'absolute';
button.style.bottom = '0px';
button.style.left = '0px';
button.innerText = '下载全部';
var container = document.getElementsByClassName('search-results');
if (container && container.length > 0) {
container[0].style.position = 'relative';
container[0].appendChild(button);
}
}
})();