豆瓣FM 红心歌单恢复播放

豆瓣FM网页版 可以解锁红心歌单里不能放的歌曲

目前为 2021-10-09 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name 豆瓣FM 红心歌单恢复播放
  3. // @namespace http://thatwind.com/
  4. // @version 0.2
  5. // @description 豆瓣FM网页版 可以解锁红心歌单里不能放的歌曲
  6. // @icon data:image/svg+xml;charset=utf-8;base64,PHN2ZyBzdHlsZT0nd2lkdGg6IDFlbTsgaGVpZ2h0OiAxZW07dmVydGljYWwtYWxpZ246IG1pZGRsZTtmaWxsOiBjdXJyZW50Q29sb3I7b3ZlcmZsb3c6IGhpZGRlbjsnIHZpZXdCb3g9JzAgMCAxMDI0IDEwMjQnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNNTEwLjgxMzQ3NiA5MTEuOTY4NDM3Yy0zLjk0OTk2MiAwLTcuODU0ODk4LTEuMDEwMDAzLTExLjQzNTQ0Ny0yLjkzODkzNS00LjQxMDQ1LTIuNDgxNTE4LTEwOS4zOTQ1MDMtNjEuMjMyNTk2LTIxNS45ODQxMjMtMTU3LjQ2NDMxMS02My4wNjYzNjEtNTYuOTEyMTk4LTExMy40MTIwMDMtMTE1LjExMTcxNC0xNDkuNzIzLTE3My4wODA5ODctNDYuMjc4LTczLjkwODI5LTY5LjcwNDU0OC0xNDcuNjU0ODk4LTY5LjcwNDU0OC0yMTkuMTk4MzI4IDAtMTM2LjE3MjM3OSAxMTAuNzcwODQ5LTI0Ni45NDIyMDUgMjQ2Ljk0MTE4Mi0yNDYuOTQyMjA1IDQ2LjA5Njg3NCAwIDk1LjA2NDEyMyAxNy4yNzEzNjIgMTM3Ljg3MzExNCA0OC42NDQ5MDcgMjUuMDA5NjAzIDE4LjMyNzQxNCA0Ni4zMjQwNDggNDAuNDQ0MTMxIDYyLjAzMjgyMiA2My45MTc3NTIgMTUuNzEyODY3LTIzLjQ3MzYyMSAzNy4wMjUyNjUtNDUuNTkwMzM4IDYyLjAxNDQwMi02My45MTc3NTIgNDIuODA3OTY4LTMxLjM3MzU0NSA5MS43NzUyMTYtNDguNjQ0OTA3IDEzNy44OTE1MzQtNDguNjQ0OTA3IDEzNi4xNTE5MTMgMCAyNDYuOTQzMjI4IDExMC43Njk4MjYgMjQ2Ljk0MzIyOCAyNDYuOTQyMjA1IDAgNzEuNTQzNDMtMjMuNDcxNTc0IDE0NS4yOTAwMzctNjkuNzI3MDYxIDIxOS4xOTgzMjgtMzYuMjQxNDEyIDU3Ljk2ODI1LTg2LjYzMTA1NiAxMTYuMTY3NzY2LTE0OS42NTQ0MzggMTczLjA4MDk4Ny0xMDYuNTY4MTMxIDk2LjIzMTcxNS0yMTEuNTc0Njk2IDE1NC45ODI3OTQtMjE1Ljk4MzA5OSAxNTcuNDY0MzExLTMuNTgxNTcyIDEuOTI4OTMyLTcuNDg0NDYyIDIuOTM4OTM1LTExLjQzNjQ3IDIuOTM4OTM1TDUxMC44MTM0NzYgOTExLjk2ODQzN3onIGZpbGw9JyNmZjJjNTYnPjwvcGF0aD48L3N2Zz4=
  7. // @author allFull
  8. // @match *://douban.fm/*
  9. // @match *://www.douban.fm/*
  10. // @match *://fm.douban.com/*
  11. // @grant unsafeWindow
  12. // @run-at document-start
  13. // ==/UserScript==
  14.  
  15. (function() {
  16.  
  17. executePageFunc(function(){
  18. return new Promise(function(resolve){
  19.  
  20. (function(e, a) { for(var i in a) e[i] = a[i]; }(window, /******/ (function(modules) { // webpackBootstrap
  21. /******/ // The module cache
  22. /******/ var installedModules = {};
  23. /******/
  24. /******/ // The require function
  25. /******/ function __webpack_require__(moduleId) {
  26. /******/
  27. /******/ // Check if module is in cache
  28. /******/ if(installedModules[moduleId]) {
  29. /******/ return installedModules[moduleId].exports;
  30. /******/ }
  31. /******/ // Create a new module (and put it into the cache)
  32. /******/ var module = installedModules[moduleId] = {
  33. /******/ i: moduleId,
  34. /******/ l: false,
  35. /******/ exports: {}
  36. /******/ };
  37. /******/
  38. /******/ // Execute the module function
  39. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  40. /******/
  41. /******/ // Flag the module as loaded
  42. /******/ module.l = true;
  43. /******/
  44. /******/ // Return the exports of the module
  45. /******/ return module.exports;
  46. /******/ }
  47. /******/
  48. /******/
  49. /******/ // expose the modules object (__webpack_modules__)
  50. /******/ __webpack_require__.m = modules;
  51. /******/
  52. /******/ // expose the module cache
  53. /******/ __webpack_require__.c = installedModules;
  54. /******/
  55. /******/ // identity function for calling harmony imports with the correct context
  56. /******/ __webpack_require__.i = function(value) { return value; };
  57. /******/
  58. /******/ // define getter function for harmony exports
  59. /******/ __webpack_require__.d = function(exports, name, getter) {
  60. /******/ if(!__webpack_require__.o(exports, name)) {
  61. /******/ Object.defineProperty(exports, name, {
  62. /******/ configurable: false,
  63. /******/ enumerable: true,
  64. /******/ get: getter
  65. /******/ });
  66. /******/ }
  67. /******/ };
  68. /******/
  69. /******/ // getDefaultExport function for compatibility with non-harmony modules
  70. /******/ __webpack_require__.n = function(module) {
  71. /******/ var getter = module && module.__esModule ?
  72. /******/ function getDefault() { return module['default']; } :
  73. /******/ function getModuleExports() { return module; };
  74. /******/ __webpack_require__.d(getter, 'a', getter);
  75. /******/ return getter;
  76. /******/ };
  77. /******/
  78. /******/ // Object.prototype.hasOwnProperty.call
  79. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  80. /******/
  81. /******/ // __webpack_public_path__
  82. /******/ __webpack_require__.p = "";
  83. /******/
  84. /******/ // Load entry module and return exports
  85. /******/ return __webpack_require__(__webpack_require__.s = 3);
  86. /******/ })
  87. /************************************************************************/
  88. /******/ ([
  89. /* 0 */
  90. /***/ (function(module, exports, __webpack_require__) {
  91.  
  92. "use strict";
  93.  
  94.  
  95. Object.defineProperty(exports, "__esModule", {
  96. value: true
  97. });
  98.  
  99. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  100.  
  101. exports.configEvent = configEvent;
  102. exports.hook = hook;
  103. exports.unHook = unHook;
  104. /*
  105. * author: wendux
  106. * email: 824783146@qq.com
  107. * source code: https://github.com/wendux/Ajax-hook
  108. */
  109.  
  110. // Save original XMLHttpRequest as _rxhr
  111. var realXhr = "_rxhr";
  112.  
  113. function configEvent(event, xhrProxy) {
  114. var e = {};
  115. for (var attr in event) {
  116. e[attr] = event[attr];
  117. } // xhrProxy instead
  118. e.target = e.currentTarget = xhrProxy;
  119. return e;
  120. }
  121.  
  122. function hook(proxy) {
  123. // Avoid double hookAjax
  124. window[realXhr] = window[realXhr] || XMLHttpRequest;
  125.  
  126. XMLHttpRequest = function XMLHttpRequest() {
  127. var xhr = new window[realXhr]();
  128. // We shouldn't hookAjax XMLHttpRequest.prototype because we can't
  129. // guarantee that all attributes are on the prototype。
  130. // Instead, hooking XMLHttpRequest instance can avoid this problem.
  131. for (var attr in xhr) {
  132. var type = "";
  133. try {
  134. type = _typeof(xhr[attr]); // May cause exception on some browser
  135. } catch (e) {}
  136. if (type === "function") {
  137. // hookAjax methods of xhr, such as `open`、`send` ...
  138. this[attr] = hookFunction(attr);
  139. } else {
  140. Object.defineProperty(this, attr, {
  141. get: getterFactory(attr),
  142. set: setterFactory(attr),
  143. enumerable: true
  144. });
  145. }
  146. }
  147. var that = this;
  148. xhr.getProxy = function () {
  149. return that;
  150. };
  151. this.xhr = xhr;
  152. };
  153.  
  154. // Generate getter for attributes of xhr
  155. function getterFactory(attr) {
  156. return function () {
  157. var v = this.hasOwnProperty(attr + "_") ? this[attr + "_"] : this.xhr[attr];
  158. var attrGetterHook = (proxy[attr] || {})["getter"];
  159. return attrGetterHook && attrGetterHook(v, this) || v;
  160. };
  161. }
  162.  
  163. // Generate setter for attributes of xhr; by this we have an opportunity
  164. // to hookAjax event callbacks (eg: `onload`) of xhr;
  165. function setterFactory(attr) {
  166. return function (v) {
  167. var xhr = this.xhr;
  168. var that = this;
  169. var hook = proxy[attr];
  170. // hookAjax event callbacks such as `onload`、`onreadystatechange`...
  171. if (attr.substring(0, 2) === 'on') {
  172. that[attr + "_"] = v;
  173. xhr[attr] = function (e) {
  174. e = configEvent(e, that);
  175. var ret = proxy[attr] && proxy[attr].call(that, xhr, e);
  176. ret || v.call(that, e);
  177. };
  178. } else {
  179. //If the attribute isn't writable, generate proxy attribute
  180. var attrSetterHook = (hook || {})["setter"];
  181. v = attrSetterHook && attrSetterHook(v, that) || v;
  182. this[attr + "_"] = v;
  183. try {
  184. // Not all attributes of xhr are writable(setter may undefined).
  185. xhr[attr] = v;
  186. } catch (e) {}
  187. }
  188. };
  189. }
  190.  
  191. // Hook methods of xhr.
  192. function hookFunction(fun) {
  193. return function () {
  194. var args = [].slice.call(arguments);
  195. if (proxy[fun]) {
  196. var ret = proxy[fun].call(this, args, this.xhr);
  197. // If the proxy return value exists, return it directly,
  198. // otherwise call the function of xhr.
  199. if (ret) return ret;
  200. }
  201. return this.xhr[fun].apply(this.xhr, args);
  202. };
  203. }
  204.  
  205. // Return the real XMLHttpRequest
  206. return window[realXhr];
  207. }
  208.  
  209. function unHook() {
  210. if (window[realXhr]) XMLHttpRequest = window[realXhr];
  211. window[realXhr] = undefined;
  212. }
  213.  
  214. /***/ }),
  215. /* 1 */
  216. /***/ (function(module, exports, __webpack_require__) {
  217.  
  218. "use strict";
  219.  
  220.  
  221. Object.defineProperty(exports, "__esModule", {
  222. value: true
  223. });
  224. exports.proxy = proxy;
  225. exports.unProxy = unProxy;
  226.  
  227. var _xhrHook = __webpack_require__(0);
  228.  
  229. var events = ['load', 'loadend', 'timeout', 'error', 'readystatechange', 'abort']; /*
  230. * author: wendux
  231. * email: 824783146@qq.com
  232. * source code: https://github.com/wendux/Ajax-hook
  233. */
  234.  
  235. var eventLoad = events[0],
  236. eventLoadEnd = events[1],
  237. eventTimeout = events[2],
  238. eventError = events[3],
  239. eventReadyStateChange = events[4],
  240. eventAbort = events[5];
  241.  
  242. var singleton,
  243. prototype = 'prototype';
  244.  
  245. function proxy(proxy) {
  246. if (singleton) throw "Proxy already exists";
  247. return singleton = new Proxy(proxy);
  248. }
  249.  
  250. function unProxy() {
  251. singleton = null;
  252. (0, _xhrHook.unHook)();
  253. }
  254.  
  255. function trim(str) {
  256. return str.replace(/^\s+|\s+$/g, '');
  257. }
  258.  
  259. function getEventTarget(xhr) {
  260. return xhr.watcher || (xhr.watcher = document.createElement('a'));
  261. }
  262.  
  263. function triggerListener(xhr, name) {
  264. var xhrProxy = xhr.getProxy();
  265. var callback = 'on' + name + '_';
  266. var event = (0, _xhrHook.configEvent)({ type: name }, xhrProxy);
  267. xhrProxy[callback] && xhrProxy[callback](event);
  268. var evt;
  269. if (typeof Event === 'function') {
  270. evt = new Event(name, { bubbles: false });
  271. } else {
  272. // https://stackoverflow.com/questions/27176983/dispatchevent-not-working-in-ie11
  273. evt = document.createEvent('Event');
  274. evt.initEvent(name, false, true);
  275. }
  276. getEventTarget(xhr).dispatchEvent(evt);
  277. }
  278.  
  279. function Handler(xhr) {
  280. this.xhr = xhr;
  281. this.xhrProxy = xhr.getProxy();
  282. }
  283.  
  284. Handler[prototype] = Object.create({
  285. resolve: function resolve(response) {
  286. var xhrProxy = this.xhrProxy;
  287. var xhr = this.xhr;
  288. xhrProxy.readyState = 4;
  289. xhr.resHeader = response.headers;
  290. xhrProxy.response = xhrProxy.responseText = response.response;
  291. xhrProxy.statusText = response.statusText;
  292. xhrProxy.status = response.status;
  293. triggerListener(xhr, eventReadyStateChange);
  294. triggerListener(xhr, eventLoad);
  295. triggerListener(xhr, eventLoadEnd);
  296. },
  297. reject: function reject(error) {
  298. this.xhrProxy.status = 0;
  299. triggerListener(this.xhr, error.type);
  300. triggerListener(this.xhr, eventLoadEnd);
  301. }
  302. });
  303.  
  304. function makeHandler(next) {
  305. function sub(xhr) {
  306. Handler.call(this, xhr);
  307. }
  308.  
  309. sub[prototype] = Object.create(Handler[prototype]);
  310. sub[prototype].next = next;
  311. return sub;
  312. }
  313.  
  314. var RequestHandler = makeHandler(function (rq) {
  315. var xhr = this.xhr;
  316. rq = rq || xhr.config;
  317. xhr.withCredentials = rq.withCredentials;
  318. xhr.open(rq.method, rq.url, rq.async !== false, rq.user, rq.password);
  319. for (var key in rq.headers) {
  320. xhr.setRequestHeader(key, rq.headers[key]);
  321. }
  322. xhr.send(rq.body);
  323. });
  324.  
  325. var ResponseHandler = makeHandler(function (response) {
  326. this.resolve(response);
  327. });
  328.  
  329. var ErrorHandler = makeHandler(function (error) {
  330. this.reject(error);
  331. });
  332.  
  333. function Proxy(proxy) {
  334. var onRequest = proxy.onRequest,
  335. onResponse = proxy.onResponse,
  336. onError = proxy.onError;
  337.  
  338. function handleResponse(xhr, xhrProxy) {
  339. var handler = new ResponseHandler(xhr);
  340. if (!onResponse) return handler.resolve();
  341. var ret = {
  342. response: xhrProxy.response,
  343. status: xhrProxy.status,
  344. statusText: xhrProxy.statusText,
  345. config: xhr.config,
  346. headers: xhr.resHeader || xhr.getAllResponseHeaders().split('\r\n').reduce(function (ob, str) {
  347. if (str === "") return ob;
  348. var m = str.split(":");
  349. ob[m.shift()] = trim(m.join(':'));
  350. return ob;
  351. }, {})
  352. };
  353. onResponse(ret, handler);
  354. }
  355.  
  356. function onerror(xhr, xhrProxy, e) {
  357. var handler = new ErrorHandler(xhr);
  358. var error = { config: xhr.config, error: e };
  359. if (onError) {
  360. onError(error, handler);
  361. } else {
  362. handler.next(error);
  363. }
  364. }
  365.  
  366. function preventXhrProxyCallback() {
  367. return true;
  368. }
  369.  
  370. function errorCallback(xhr, e) {
  371. onerror(xhr, this, e);
  372. return true;
  373. }
  374.  
  375. function stateChangeCallback(xhr, xhrProxy) {
  376. if (xhr.readyState === 4 && xhr.status !== 0) {
  377. handleResponse(xhr, xhrProxy);
  378. } else if (xhr.readyState !== 4) {
  379. triggerListener(xhr, eventReadyStateChange);
  380. }
  381. return true;
  382. }
  383.  
  384. return (0, _xhrHook.hook)({
  385. onload: preventXhrProxyCallback,
  386. onloadend: preventXhrProxyCallback,
  387. onerror: errorCallback,
  388. ontimeout: errorCallback,
  389. onabort: errorCallback,
  390. onreadystatechange: function onreadystatechange(xhr) {
  391. return stateChangeCallback(xhr, this);
  392. },
  393. open: function open(args, xhr) {
  394. var _this = this;
  395. var config = xhr.config = { headers: {} };
  396. config.method = args[0];
  397. config.url = args[1];
  398. config.async = args[2];
  399. config.user = args[3];
  400. config.password = args[4];
  401. config.xhr = xhr;
  402. var evName = 'on' + eventReadyStateChange;
  403. if (!xhr[evName]) {
  404. xhr[evName] = function () {
  405. return stateChangeCallback(xhr, _this);
  406. };
  407. }
  408.  
  409. var defaultErrorHandler = function defaultErrorHandler(e) {
  410. onerror(xhr, _this, (0, _xhrHook.configEvent)(e, _this));
  411. };
  412. [eventError, eventTimeout, eventAbort].forEach(function (e) {
  413. var event = 'on' + e;
  414. if (!xhr[event]) xhr[event] = defaultErrorHandler;
  415. });
  416.  
  417. // 如果有请求拦截器,则在调用onRequest后再打开链接。因为onRequest最佳调用时机是在send前,
  418. // 所以我们在send拦截函数中再手动调用open,因此返回true阻止xhr.open调用。
  419. //
  420. // 如果没有请求拦截器,则不用阻断xhr.open调用
  421. if (onRequest) return true;
  422. },
  423. send: function send(args, xhr) {
  424. var config = xhr.config;
  425. config.withCredentials = xhr.withCredentials;
  426. config.body = args[0];
  427. if (onRequest) {
  428. // In 'onRequest', we may call XHR's event handler, such as `xhr.onload`.
  429. // However, XHR's event handler may not be set until xhr.send is called in
  430. // the user's code, so we use `setTimeout` to avoid this situation
  431. var req = function req() {
  432. onRequest(config, new RequestHandler(xhr));
  433. };
  434. config.async === false ? req() : setTimeout(req);
  435. return true;
  436. }
  437. },
  438. setRequestHeader: function setRequestHeader(args, xhr) {
  439. // Collect request headers
  440. xhr.config.headers[args[0].toLowerCase()] = args[1];
  441. return true;
  442. },
  443. addEventListener: function addEventListener(args, xhr) {
  444. var _this = this;
  445. if (events.indexOf(args[0]) !== -1) {
  446. var handler = args[1];
  447. getEventTarget(xhr).addEventListener(args[0], function (e) {
  448. var event = (0, _xhrHook.configEvent)(e, _this);
  449. event.type = args[0];
  450. event.isTrusted = true;
  451. handler.call(_this, event);
  452. });
  453. return true;
  454. }
  455. },
  456. getAllResponseHeaders: function getAllResponseHeaders(_, xhr) {
  457. var headers = xhr.resHeader;
  458. if (headers) {
  459. var header = "";
  460. for (var key in headers) {
  461. header += key + ': ' + headers[key] + '\r\n';
  462. }
  463. return header;
  464. }
  465. },
  466. getResponseHeader: function getResponseHeader(args, xhr) {
  467. var headers = xhr.resHeader;
  468. if (headers) {
  469. return headers[(args[0] || '').toLowerCase()];
  470. }
  471. }
  472. });
  473. }
  474.  
  475. /***/ }),
  476. /* 2 */,
  477. /* 3 */
  478. /***/ (function(module, exports, __webpack_require__) {
  479.  
  480. "use strict";
  481.  
  482.  
  483. Object.defineProperty(exports, "__esModule", {
  484. value: true
  485. });
  486. exports.ah = undefined;
  487.  
  488. var _xhrHook = __webpack_require__(0);
  489.  
  490. var _xhrProxy = __webpack_require__(1);
  491.  
  492. // ah(ajax hook)
  493. /*
  494. * author: wendux
  495. * email: 824783146@qq.com
  496. * source code: https://github.com/wendux/Ajax-hook
  497. */
  498.  
  499. var ah = exports.ah = {
  500. proxy: _xhrProxy.proxy,
  501. unProxy: _xhrProxy.unProxy,
  502. hook: _xhrHook.hook,
  503. unHook: _xhrHook.unHook
  504. };
  505.  
  506. /***/ })
  507. /******/ ])));
  508.  
  509. //ajaxhook.min.js used to hook the ajax of the page to change the data.
  510.  
  511. resolve();
  512. })
  513. },[],function(){
  514. unsafeWindow.ah.hook({
  515. responseText: {
  516. getter: ajaxReParse
  517. },
  518. response: {
  519. getter:ajaxReParse
  520. }
  521. });
  522.  
  523. function ajaxReParse(v){
  524. var temp=JSON.parse(v);
  525. if(temp&&temp.songs){
  526. for(let song of temp.songs){
  527. song.is_douban_playable=true;
  528. song.status=0;
  529. song.playable=true;
  530. song.is_royal=true;
  531. song.is_site_song=true;
  532. if(song.item_info){
  533. song.item_info.comment="";
  534. }
  535. }
  536. }
  537. if(temp&&temp[0]&&(temp[0].is_douban_playable!==undefined)){
  538. for(let song of temp){
  539. song.is_douban_playable=true;
  540. song.status=0;
  541. song.playable=true;
  542. song.is_royal=true;
  543. song.is_site_song=true;
  544. }
  545. }
  546. if(temp&&temp.songlist){
  547. for(let song of temp.songlist.songs){
  548. song.is_douban_playable=true;
  549. song.status=0;
  550. song.playable=true;
  551. song.is_royal=true;
  552. song.is_site_song=true;
  553. }
  554. }
  555. return JSON.stringify(temp);
  556. }
  557. })
  558.  
  559. function executePageFunc(func, argus = [], after) {
  560. if (window.executePageFuncIndexor === undefined) {
  561. window.executePageFuncIndexor = 0;
  562. }
  563. if (!document.querySelector("#zd_executePageFuncPromiseResult_ele")) {
  564. document.documentElement.insertAdjacentHTML("beforeend","<span id='zd_executePageFuncPromiseResult_ele' style='display:none;'></span>");
  565. }
  566. if (after) {
  567. var promiseSessionStorageName = "zd_excutePageFuncPromise_result_" + (executePageFuncIndexor++) + "_" + (new Date()).getTime();
  568. var observer = new MutationObserver(function (mutationsList) {
  569. if (document.querySelector("#zd_executePageFuncPromiseResult_ele").getAttribute("data-result-name") == promiseSessionStorageName) {
  570. after();
  571. var result;
  572. try {
  573. result = JSON.parse(sessionStorage[promiseSessionStorageName]);
  574. } catch (e) {
  575. result = null;
  576. }
  577. after(result);
  578. observer.disconnect();
  579. }
  580. });
  581. observer.observe(document.querySelector("#zd_executePageFuncPromiseResult_ele"), {
  582. "attributes": true,
  583. "attributeFilter": ["data-result-name"]
  584. });
  585. }
  586. var ele = document.createElement("script");
  587. ele.innerHTML = "sessionStorage.zd_executePageFuncTempResult=JSON.stringify((" + func.toString() + ")(...JSON.parse('" + JSON.stringify(argus) + "'))" +
  588. (after ? (".then(function(result){sessionStorage." + promiseSessionStorageName + "=JSON.stringify(result);document.getElementById('zd_executePageFuncPromiseResult_ele').setAttribute('data-result-name','" + promiseSessionStorageName + "')})") : "") +
  589. ");";
  590. document.documentElement.appendChild(ele);
  591. var result;
  592. try {
  593. result = JSON.parse(sessionStorage.zd_executePageFuncTempResult);
  594. } catch (e) {
  595. result = null;
  596. }
  597. return result;
  598. }
  599.  
  600. })();

QingJ © 2025

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