// ==UserScript==
// @name steam史低价格显示&快速打开steamdb
// @namespace http://tampermonkey.net/
// @version 0.9
// @namespace akari
// @description 在steam软件页面自动显示史低价格。在steam页面对着一个商品按ctrl+右键,即可快速打开该商品的steamdb链接,用于查看其价格曲线等。
// @author Pikaqian
// @match https://store.steampowered.com/*
// @icon https://store.steampowered.com/favicon.ico
// @grant GM_xmlhttpRequest
// @connect https://steamdb.info/
// ==/UserScript==
(function() {
'use strict';
let styleE = document.createElement('style'),button,failbutton
document.body.appendChild(styleE);
styleE.textContent=`
#price{
color:#c1e0f7;
font-size:20px;
height:32px;
width:40px;
text-align:center;
line-height:32px;
opacity:.0;
background: linear-gradient(to right, #3da2f1, #2561d1)
}
#button{
height:16px;
width:18px;
border-bottom-right-radius:21px;
border-top-right-radius:21px;
color:#fff;
padding:6px;
opacity:.5;
left:-22px;
cursor:pointer;
position:fixed;
z-index:10;
font-size:14px;
top:38%;
background:#fff;
transition: 0.3s
}
#failbutton{
height:30px;
width:30px;
background:#fff;
left:10px;
top:10px;
position:fixed;
z-index:1000
}
`
var match_bundle=/bundle\/\d{3,7}\//
var match_app=/app\/\d{3,7}\//
var match_sub=/sub\/\d{3,7}\//
var page_url=window.location.href,img
function openUrl(type,img){
var page_substr=img.match(/\d{3,7}/)
var last_id=page_substr[0]
window.open("https://steamdb.info/"+type+"/"+last_id+"/")
event.preventDefault()
}
function getA(event){
var elemA=event.target
for(var o=0;o<4;o++){
if(event.target.localName=="a"){
img=event.target.href
break
}
else{
elemA=elemA.parentNode
if(elemA.localName=="a"){
img=elemA.href
break
}
}
}
}
function checkImg(){
var elemA=event.target
if(elemA.className=="similar_recent_apps_container"||elemA.id=="recommended_block"){
return true
}
else{
for(var u=0;u<5;u++){
elemA=elemA.parentNode
if(elemA.className=="similar_recent_apps_container"||elemA.id=="recommended_block"){
return true
}
}
return false
}
}
function setCookie(cname,cvalue,exdays){
var cookie_all=cname
for(var i=0;i<20;i++){
cookie_all=cookie_all+"1"
}
exdays=-1
cookie_all=cname+"="+cvalue+"; "+exdays+";path=/"
var d = new Date();
d.setTime(d.getTime()+(exdays*24*60*60*1000));
var expires = "expires="+d.toGMTString();
document.cookie = cookie_all;
}
function getCookie(cname){
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name)==0){
return c.substring(name.length,c.length);
}
}
return "";
}
function getelemt(findelement){
//——————————————————————————
var elem_1 = document.getElementsByTagName("svg");
for(var h=0;h<elem_1.length;h++){
var match_result=elem_1[h].id.match(findelement)
if(match_result!=null){
return elem_1[h]
break
}
}
//——————————————————————————
}
function addRightButton () {
var color="#fff"
if(getCookie("low")==1){
color="#2a6fd8"
}
button = document.createElementNS("http://www.w3.org/2000/svg", "svg");
var path2 = document.createElementNS("http://www.w3.org/2000/svg", 'path');
button.setAttribute("aria-hidden","true");
button.setAttribute('viewbox', '0 0 24 24');
button.setAttribute('width', '24px');
button.setAttribute('height', '24px');
//path2.setAttribute('d', 'M0 0 H 30 V 30 H 0 Z');
path2.setAttribute('d','M 841.639 555.272 c 1.77544 -14.2014 3.10676 -28.626 3.10676 -43.2715 c 0 -14.6456 -1.33132 -29.0691 -3.10676 -43.2715 l 93.8658 -73.4499 c 8.43204 -6.65661 10.8737 -18.6395 5.32528 -28.4039 l -88.7616 -153.779 c -5.54734 -9.54233 -17.0872 -13.5363 -27.0726 -9.54233 l -110.509 44.6028 c -22.8566 -17.5303 -47.9317 -32.3979 -75.0032 -43.7156 L 622.841 86.8306 c -1.99749 -10.4295 -11.0957 -18.6395 -22.1904 -18.6395 l -177.523 0 c -11.0957 0 -20.1929 8.20999 -21.9683 18.6395 l -16.6431 117.61 c -27.0726 11.3167 -52.1477 25.9623 -75.0032 43.7156 l -110.508 -44.6028 c -9.98542 -3.77191 -21.5242 0 -27.0726 9.54233 l -88.7616 153.779 c -5.54734 9.54233 -3.10676 21.5242 5.32528 28.4039 l 93.6438 73.4499 c -1.77544 14.2014 -3.10676 28.626 -3.10676 43.2715 c 0 14.6456 1.33132 29.0691 3.10676 43.2715 l -93.6438 73.4499 c -8.43204 6.65661 -10.8737 18.6395 -5.32528 28.4039 l 88.7616 153.779 c 5.54734 9.54233 17.0861 13.5363 27.0726 9.54233 l 110.509 -44.6028 c 22.8566 17.5303 47.9317 32.3979 75.0032 43.7156 l 16.6431 117.61 c 1.77544 10.4295 10.8737 18.6395 21.9683 18.6395 l 177.523 0 c 11.0957 0 20.1929 -8.20999 21.9683 -18.6395 l 16.6431 -117.61 c 27.0726 -11.3167 52.1477 -25.9623 75.0032 -43.7156 l 110.508 44.6028 c 9.98542 3.77191 21.5252 0 27.0726 -9.54233 l 88.7616 -153.779 c 5.54734 -9.54233 3.10676 -21.5242 -5.32528 -28.4039 L 841.639 555.272 Z M 511.888 667.333 c -85.8769 0 -155.333 -69.4559 -155.333 -155.333 s 69.4559 -155.333 155.333 -155.333 c 85.8769 0 155.333 69.4559 155.333 155.333 S 597.765 667.333 511.888 667.333 Z')
path2.style.transform="scale(0.016)"
path2.setAttribute('fill', '#000');
button.appendChild(path2);
button.id = 'button';
button.style.background=color
document.body.appendChild(button);
}
function fail() {
var color="#fff"
failbutton = document.createElementNS("http://www.w3.org/2000/svg", "svg");
var path3 = document.createElementNS("http://www.w3.org/2000/svg", 'path');
failbutton.setAttribute("aria-hidden","true");
failbutton.setAttribute('viewbox', '0 0 24 24');
failbutton.setAttribute('width', '24px');
failbutton.setAttribute('height', '24px');
//path2.setAttribute('d', 'M0 0 H 30 V 30 H 0 Z');
path3.setAttribute('d','M524.072421 0a507.850105 507.850105 0 1 0 507.850105 507.850105A507.850105 507.850105 0 0 0 524.072421 0z m0 931.031579a423.181474 423.181474 0 1 1 423.181474-423.181474 423.181474 423.181474 0 0 1-423.181474 423.181474z m0-711.78779a169.283368 169.283368 0 0 0-169.283368 169.06779 42.307368 42.307368 0 0 0 84.614736 0 84.614737 84.614737 0 1 1 84.668632 84.614737 42.307368 42.307368 0 0 0-42.307368 42.307368v110.484211a42.307368 42.307368 0 0 0 84.614736 0v-73.620211a169.283368 169.283368 0 0 0-42.307368-333.069473z m-42.307368 537.869474a42.307368 42.307368 0 1 0 42.307368-42.307368 42.307368 42.307368 0 0 0-42.307368 42.307368z m0 0')
path3.style.transform="scale(0.02)"
path3.setAttribute('fill', '#000');
failbutton.appendChild(path3);
failbutton.id = 'failbutton';
failbutton.style.background=color
failbutton.borderRadius="100px"
document.body.appendChild(failbutton);
}
addRightButton()
button.addEventListener('mouseenter',()=>{
var elem=getelemt("button")
elem.style.transform="translateX(20px)"
})
button.addEventListener('mouseleave',()=>{
var elem=getelemt("button")
elem.style.transform="translateX(0px)"
})
button.addEventListener('click',()=>{
if(getCookie("low")==""||getCookie("low")==0){
setCookie("low","1",-1)
document.getElementById("button").style.background="#2a6fd8"
}
else if(getCookie("low")==1){
setCookie("low","0",-1)
document.getElementById("button").style.background="#fff"
}
})
if(getCookie("low")==1){
if(page_url.match(/app\/\d{3,7}/)!=null){
var newPrice_1=document.getElementsByClassName("game_purchase_action_bg")[0]
var newPrice_2=document.getElementsByClassName("game_purchase_action_bg")[0].childNodes[0]
var price
var finalUrl=page_url.match(/app\/\d{3,7}/)[0]
var agent=navigator.userAgent
GM_xmlhttpRequest({
method: "GET",
url: "https://steamdb.info/"+finalUrl,
headers:{
"User-Agent": agent
},
onload: function(res) {
if(res.status === 200){
console.log('成功')
var p=res.responseText
console.log(p)
var q=res.responseText.match("table-prices-current")
var a=p.split('data-cc="cn"')[p.split('data-cc="cn"').length-1]
var b=a.split('data-cc=')[0]
var r=res.responseText.substr(q.index,10)
var price=b.match(/\d{1,3}<\/td>/)[0].match(/\d{1,3}/)[0]
var price_len=price.length
console.log(price)
if(price!=undefined){
var oText=document.createElement("cookie_text");
oText.setAttribute("id","price");
oText.type="text";
var text1=document.createTextNode("¥"+price);
//oText.setAttribute('width',40+2*parseInt(price_len)+"px");
/*
var oo=document.getElementsByTagName("style")[0].innerText.replace(/width:40px/,"width:"+parseInt(parseInt(40)+parseInt(10*parseInt(price_len)))+"px")
document.getElementsByTagName("style")[0].childNodes[0].remove()
document.getElementsByTagName("style").appendChild(oo)
*/
oText.appendChild(text1)
//newPrice.appendChild(oText)
newPrice_1.insertBefore(oText,newPrice_2);
oText.style.width=parseInt(parseInt(40)+parseInt(10*parseInt(price_len)))+"px"
oText.style.opacity="1"
}
//fail()
}
else{
console.log('失败')
console.log(res)
//fail()
}
}
})
}
}
window.addEventListener('contextmenu',function (event){
if(event.ctrlKey==true){
if(page_url.match(match_bundle)!=null){
openUrl("bundle",page_url)
}
else if(page_url.match(match_app)!=null){
var count=0
elemA=event.target
if(checkImg()==true){
getA(event)
var page_substr=img.match(/\d{3,7}/)
var last_id=page_substr[0]
window.open("https://steamdb.info/app/"+last_id+"/")
event.preventDefault()
}
else{
openUrl("app",page_url)
}
}
else if(page_url.match(match_sub)!=null){
openUrl("sub",page_url)
}
else{
var lala=event.target
var elemA=event.target
for(var i=0;i<10;i++){
if(event.target.localName=="a"){
img=event.target.href
}
else{
elemA=elemA.parentNode
if(elemA.localName=="a"){
img=elemA.href
break
}
else if(elemA.className=="wishlist_row"){
for(var m=0;m<elemA.parentNode.childNodes.length;m++){
if(elemA.childNodes[m].localName=="a"){
img=elemA.childNodes[m].href
var num=0
break
}
}
if(num==0){
break
}
}
}
}
page_substr=img.match(/\d{3,7}/)
last_id=page_substr[0]
for(var k=0;k<img.split("/").length;k++){
if(img.split("/")[k]=="store.steampowered.com"){
var type=img.split("/")[k+1]
break
}
}
window.open("https://steamdb.info/"+type+"/"+last_id+"/")
event.preventDefault()
}
}
})
})();