AppStore QR code

Add QRCode to iTunes AppStore page.

  1. // ==UserScript==
  2. // @name AppStore QR code
  3. // @namespace https://www.iplaysoft.com
  4. // @version 1.32
  5. // @description Add QRCode to iTunes AppStore page.
  6. // @author X-Force
  7. // @match https://apps.apple.com/*
  8. // @grant none
  9. // @require https://cdn.staticfile.org/jquery/3.6.3/jquery.min.js
  10. // @require https://cdn.staticfile.org/qrious/4.0.2/qrious.min.js
  11. // @run-at document-start
  12. // ==/UserScript==
  13.  
  14.  
  15. //https://gist.github.com/BrockA/2625891#file-waitforkeyelements-js
  16. //function waitForKeyElements(e,t,n,a){(o=void 0===a?$(e):$(a).contents().find(e))&&o.length>0?(l=!0,o.each((function(){var e=$(this);!e.data("alreadyFound")&&(t(e)?l=!1:e.data("alreadyFound",!0))}))):l=!1;var o,l,r=waitForKeyElements.controlObj||{},i=e.replace(/[^\w]/g,"_"),c=r[i];l&&n&&c?(clearInterval(c),delete r[i]):c||(c=setInterval((function(){waitForKeyElements(e,t,n,a)}),300),r[i]=c),waitForKeyElements.controlObj=r}
  17. function waitForKeyElements(selectorTxt,actionFunction,bWaitOnce,iframeSelector){var targetNodes,btargetsFound;(targetNodes=void 0===iframeSelector?$(selectorTxt):$(iframeSelector).contents().find(selectorTxt))&&targetNodes.length>0?(btargetsFound=!0,targetNodes.each((function(){var jThis=$(this);jThis.data("alreadyFound")||!1||(actionFunction(jThis)?btargetsFound=!1:jThis.data("alreadyFound",!0))}))):btargetsFound=!1;var controlObj=waitForKeyElements.controlObj||{},controlKey=selectorTxt.replace(/[^\w]/g,"_"),timeControl=controlObj[controlKey];btargetsFound&&bWaitOnce&&timeControl?(clearInterval(timeControl),delete controlObj[controlKey]):timeControl||(timeControl=setInterval((function(){waitForKeyElements(selectorTxt,actionFunction,bWaitOnce,iframeSelector)}),300),controlObj[controlKey]=timeControl),waitForKeyElements.controlObj=controlObj}
  18. console.log("Begin");
  19. var $ = window.jQuery;
  20. var runOnce=false;
  21. var foundVideo=false;
  22. var foundImage=false;
  23.  
  24. (function() {
  25. 'use strict';
  26. //Story 下载标题图片
  27. var url = window.location.href;
  28. var matchStory = url.match(/https?:\/\/apps\.apple\.com\/.+?\/story\/id([0-9]+)/);
  29.  
  30. if(matchStory!==null){
  31. //waitForKeyElements(".story-card--video>.story-card__content",addVideoDownloadLink)
  32. waitForKeyElements(".video-player--opaque",getVideoLink);
  33.  
  34. //由于图片是 Lazy Load 的,所以需要用这个函数监视
  35. waitForKeyElements(".story-card .we-artwork__image--lazyload",getImgLink);
  36. }else{
  37. //添加 QR 代码
  38. // https://gf.qytechs.cn/scripts/5392-waitforkeyelements/code/WaitForKeyElements.js?version=115012
  39. waitForKeyElements (".we-banner", addQR);
  40. }
  41.  
  42. /*
  43. jquery 的函数在这里没用
  44. $(document).ready(function(){
  45. console.log("xxxcxcxcxcx");
  46. });
  47. */
  48. })();
  49.  
  50. function getVideoLink(){
  51. foundVideo=true;
  52. if(runOnce){return;}
  53. runOnce=true;
  54.  
  55. // var myImgButton = document.createElement("div");
  56. //myImgButton.innerHTML = "xxxxxxxx";
  57. //insertAfter(myImgButton,document.getElementsByClassName("story-card")[0]);
  58.  
  59. var stroyVideoCard=$(".story-card--video")[0];
  60. console.log(stroyVideoCard);
  61. if(stroyVideoCard!=undefined){
  62. var stroyVideoCardCSS=$(".story-card--video>.story-card__content")[0].style.cssText;
  63. stroyVideoCardCSS=decodeURI(stroyVideoCardCSS).replace(/\\/g, '');
  64. console.log("CSS: "+stroyVideoCardCSS);
  65. var re=/url\((.+?)\)/gm
  66. var matches = re.exec(stroyVideoCardCSS);
  67. if(matches && matches[1]){
  68. console.log(matches);
  69. var imgUrl= decodeURI(matches[1]);
  70. //addDownloadLinks(imgUrl);
  71. }
  72.  
  73. var videoUrl=$(".story-card__video>.background-video")[0].shadowRoot.querySelector("div > video").src;
  74. console.log(videoUrl);
  75. addDownloadLinks(imgUrl,videoUrl);
  76. }
  77. }
  78.  
  79.  
  80. function getImgLink(){
  81. if(foundVideo || runOnce){
  82. return;
  83. }
  84. runOnce=true;
  85. console.log("Found Story ");
  86.  
  87. // var imgSrcset=$(".story-card>.we-artwork>source[type='image/png']");
  88. var imgSrcset=$(".story-card>.we-artwork>source")[0];
  89. if(imgSrcset!=null){
  90. console.log(imgSrcset);
  91. var imgUrlStr=$(imgSrcset).attr('srcset').split(',').pop().trim().split(' ')[0];
  92.  
  93. if(imgUrlStr!==null){
  94. var imgMatch=imgUrlStr.match(/(https?:\/\/.+?.(jpg|webp))\s*/);
  95. if(imgMatch!==null && imgMatch[1]!==null){
  96. var imgUrl = imgMatch[1];
  97. console.log(imgUrl);
  98. addDownloadLinks(imgUrl,null);
  99. }
  100. }
  101. }
  102. }
  103.  
  104. function addDownloadLinks(imgUrl,videoUrl){
  105. var imgUrlDefault = imgUrl.replace(/\.(jpg|webp)/,".jpg");
  106. var imgUrlVertical = imgUrl.replace(/\/(\d+)x(\d+)(\w+?)\.(jpg|webp)/,"/0x4096h.jpg");
  107. var imgUrlHorizon = imgUrl.replace(/\/(\d+)x(\d+)(\w+?)\.(jpg|webp)/,"/4096x0w.jpg");
  108.  
  109. var linkHtml='<a style="margin:0 auto;display:inline-block" target="_blank" href="'+imgUrlHorizon+'">下载封面图片 (横向)</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;';
  110. linkHtml=linkHtml+'<a style="margin:20px auto;display:inline-block" target="_blank" href="'+imgUrlVertical+'">下载竖向</a>&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;';
  111. linkHtml=linkHtml+'<a style="margin:20px auto;display:inline-block" target="_blank" href="'+imgUrlDefault+'">封面图</a>';
  112.  
  113. if(videoUrl!=null){
  114. linkHtml=linkHtml+'&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;';
  115. linkHtml=linkHtml+'<a style="margin:20px auto;display:inline-block" target="_blank" href="'+videoUrl+'">下载视频</a>';
  116. }
  117.  
  118. var myImgButton = document.createElement("div");
  119. myImgButton.innerHTML = linkHtml;
  120. insertAfter(myImgButton,document.getElementsByClassName("story-card")[0]);
  121. }
  122.  
  123.  
  124. function insertAfter(newNode, referenceNode) {
  125. referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
  126. }
  127.  
  128. function addQR(){
  129. var url = location.href.split('#')[0];
  130. //iTunes 页面增加 QR Code
  131. if(document.title.match("Mac App Store")==null && url.match("\/app\/")){
  132. var regex = /\/id([0-9]+)/;
  133. var match = url.match(regex);
  134. var id = null;
  135. if(match!==null){
  136. id = match[1];
  137. }
  138. if(id!==null){
  139. var xurl = "itmss://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id="+id+"&mt=8&at=10laHZ";
  140. var mydiv = document.createElement("div");
  141. var html = '<style>#xf_itunes_link{display: inline-block;padding: 8px 22px;background: #228fff;color: #fff;font-size: 16px;border-radius: 6px;}#xf_itunes_link:hover{text-decoration:none}</style>';
  142. html = html + '<a id="xf_itunes_link" href="'+xurl+'">在 iTunes 中查看</a>';
  143. html = html + '<canvas id="qrcode" style="position:absolute;right:2px;top:64px;width:200px;height:200px"></canvas>';
  144. mydiv.innerHTML = html;
  145. document.getElementsByClassName("product-header")[0].appendChild(mydiv);
  146. document.getElementsByClassName("product-hero")[0].style.position="relative";
  147. var qrious = new QRious({
  148. element: document.getElementById('qrcode'),
  149. value: url,
  150. size: 400
  151. });
  152. }
  153. }
  154. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址