Greasy Fork is available in English.

解除B站區域限制輔助腳本(原名稱:自定義服務器)

以彈窗設定解除B站區域限制腳本設置的小工具,必須配合解除B站區域限制腳本一同使用。

Mint 2017.05.28.. Lásd a legutóbbi verzió

  1. // ==UserScript==
  2. // @name 解除B站區域限制輔助腳本(原名稱:自定義服務器)
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.7.2
  5. // @description 以彈窗設定解除B站區域限制腳本設置的小工具,必須配合解除B站區域限制腳本一同使用。
  6. // @author i9602097
  7. // @include *://www.bilibili.com/video/av*
  8. // @include *://bangumi.bilibili.com/anime/*
  9. // @include *://www.bilibili.com/blackboard/html5player.html*
  10. // @run-at document-end
  11. // @grant GM_registerMenuCommand
  12. // @grant unsafeWindow
  13. // ==/UserScript==
  14. //
  15. if (unsafeWindow.self === unsafeWindow.top) {
  16. console.log("Hello");
  17. var balh_server = null;
  18. var balh_mode = null;
  19. var balh_blocked_vip = null;
  20.  
  21. function logCookie(argument) {
  22. if (unsafeWindow.bangumi_aera_limit_hack) {
  23. console.log("讀取的Cookie值為:" + argument + "=" + unsafeWindow.bangumi_aera_limit_hack.getCookie(argument));
  24. return unsafeWindow.bangumi_aera_limit_hack.getCookie(argument);
  25. } else {
  26. console.log("執行失敗\n還未加載解除B站區域限制腳本");
  27. }
  28. }
  29.  
  30. function setDefaultText(argument) {
  31. if (argument) {
  32. return argument;
  33. } else {
  34. return 'https://www.biliplus.com';
  35. }
  36. }
  37.  
  38. function setDefaultValue(argument) {
  39. if (argument) {
  40. return argument;
  41. } else {
  42. return 'default';
  43. }
  44. }
  45.  
  46. function popupText(argument) {
  47. if (argument) {
  48. return "讀取的Cookie值為:" + argument + "\n將使用上述伺服器";
  49. } else {
  50. return "讀取的Cookie值為空白\n將使用預設伺服器";
  51. }
  52. }
  53.  
  54. function warningText(argument) {
  55. if (argument) {
  56. return "\n請注意需再使用「打開異步登錄登入頁面」登入新伺服器";
  57. } else {
  58. return "";
  59. }
  60. }
  61.  
  62. function modeText(argument) {
  63. switch (argument) {
  64. case 'default':
  65. return "默認模式";
  66. break;
  67. case 'replace':
  68. return "替換模式";
  69. break;
  70. case 'redirect':
  71. return "重定向模式";
  72. break;
  73. default:
  74. return "錯誤";
  75. }
  76. }
  77.  
  78. function setHost(argument) {
  79. if (argument === null) {
  80. balh_server = logCookie('balh_server');
  81. alert("已取消操作\nCookie沒被修改\n" + popupText(unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_server')));
  82. } else {
  83. if (unsafeWindow.bangumi_aera_limit_hack.setCookie('balh_server', argument) && unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_server') == argument) {
  84. balh_server = logCookie('balh_server');
  85. alert("操作成功\nCookie已經成功修改\n" + popupText(unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_server')) + "\n將重新加載頁面" + warningText(unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_blocked_vip')));
  86. unsafeWindow.location.reload(true);
  87. } else {
  88. balh_server = logCookie('balh_server');
  89. alert("操作失敗\n請檢查解除B站區域限制腳本是否正確");
  90. unsafeWindow.location.reload(true);
  91. }
  92. }
  93. }
  94.  
  95. function changeServer() {
  96. if (unsafeWindow.bangumi_aera_limit_hack) {
  97. logCookie('balh_server');
  98. setHost(prompt("請輸入自定義服務器地址\n清空則清除Cookie值\n按取消鍵取消操作", setDefaultText(unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_server'))));
  99. } else {
  100. alert("執行失敗\n請確定是否已安裝並打開解除B站區域限制腳本");
  101. }
  102. }
  103.  
  104. function getMode() {
  105. if (unsafeWindow.bangumi_aera_limit_hack) {
  106. logCookie('balh_mode');
  107. if (setDefaultValue(unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_mode')) == 'default' || setDefaultValue(unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_mode')) == 'replace' || setDefaultValue(unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_mode')) == 'redirect') {
  108. alert("正在使用" + modeText(setDefaultValue(unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_mode'))));
  109. } else {
  110. balh_mode = logCookie('balh_mode');
  111. alert("Cookie值錯誤\n將重新加載頁面\n修正錯誤");
  112. unsafeWindow.location.reload(true);
  113. }
  114. } else {
  115. alert("執行失敗\n請確定是否已安裝並打開解除B站區域限制腳本");
  116. }
  117. }
  118.  
  119. function setMode(argument) {
  120. if (unsafeWindow.bangumi_aera_limit_hack) {
  121. logCookie('balh_mode');
  122. if (setDefaultValue(unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_mode')) != argument) {
  123. if (confirm("正在使用" + modeText(setDefaultValue(unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_mode'))) + "\n是否把代理模式設定為" + modeText(setDefaultValue(argument)))) {
  124. if (unsafeWindow.bangumi_aera_limit_hack.setCookie('balh_mode', argument) && setDefaultValue(unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_mode')) == argument) {
  125. balh_mode = logCookie('balh_mode');
  126. alert("操作成功\n代理模式已設定為" + modeText(setDefaultValue(argument)) + "\n將重新加載頁面");
  127. unsafeWindow.location.reload(true);
  128. } else {
  129. balh_mode = logCookie('balh_mode');
  130. alert("操作失敗\n請檢查解除B站區域限制腳本是否正確");
  131. unsafeWindow.location.reload(true);
  132. }
  133. } else {
  134. alert("已取消操作");
  135. }
  136. } else {
  137. alert("不要沒事找事做");
  138. }
  139. } else {
  140. alert("執行失敗\n請確定是否已安裝並打開解除B站區域限制腳本");
  141. }
  142. }
  143.  
  144. function setDefaultMode() {
  145. setMode('default');
  146. }
  147.  
  148. function setReplaceMode() {
  149. setMode('replace');
  150. }
  151.  
  152. function setRedirectMode() {
  153. setMode('redirect');
  154. }
  155.  
  156. function changeAsyncLogin() {
  157. if (unsafeWindow.bangumi_aera_limit_hack) {
  158. logCookie('balh_blocked_vip');
  159. if (unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_blocked_vip')) {
  160. if (confirm("正在使用異步登錄\n是否關閉異步登錄")) {
  161. if (unsafeWindow.bangumi_aera_limit_hack.setCookie('balh_blocked_vip', '') && !unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_blocked_vip')) {
  162. balh_blocked_vip = logCookie('balh_blocked_vip');
  163. alert("操作成功\n異步登錄已關閉\n將重新加載頁面");
  164. unsafeWindow.location.reload(true);
  165. } else {
  166. balh_blocked_vip = logCookie('balh_blocked_vip');
  167. alert("操作失敗\n請檢查解除B站區域限制腳本是否正確");
  168. unsafeWindow.location.reload(true);
  169. }
  170. } else {
  171. alert("已取消操作");
  172. }
  173. } else {
  174. if (confirm("沒有使用異步登錄\n是否打開異步登錄")) {
  175. if (unsafeWindow.bangumi_aera_limit_hack.setCookie('balh_blocked_vip', 'true') && unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_blocked_vip')) {
  176. balh_blocked_vip = logCookie('balh_blocked_vip');
  177. alert("操作成功\n異步登錄已開打開\n將重新加載頁面\n如果是第一次使用這功能\n請注意在重新加載後\n使用「打開異步登錄登入頁面」登入代理伺服器");
  178. unsafeWindow.location.reload(true);
  179. } else {
  180. balh_blocked_vip = logCookie('balh_blocked_vip');
  181. alert("操作失敗\n請檢查解除B站區域限制腳本是否正確");
  182. unsafeWindow.location.reload(true);
  183. }
  184. } else {
  185. alert("已取消操作");
  186. }
  187. }
  188. } else {
  189. alert("執行失敗\n請確定是否已安裝並打開解除B站區域限制腳本");
  190. }
  191. }
  192.  
  193. function checkCookie() {
  194. console.log("頁面發生改變\n檢查Cookie是否變化");
  195. if (unsafeWindow.bangumi_aera_limit_hack) {
  196. console.log("記錄的Cookie值為:balh_server=" + balh_server);
  197. console.log("記錄的Cookie值為:balh_mode=" + balh_mode);
  198. console.log("記錄的Cookie值為:balh_blocked_vip=" + balh_blocked_vip);
  199. logCookie('balh_server');
  200. logCookie('balh_mode');
  201. logCookie('balh_blocked_vip');
  202. if (unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_server') != balh_server || unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_mode') != balh_mode || unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_blocked_vip') != balh_blocked_vip) {
  203. balh_server = logCookie('balh_server');
  204. balh_mode = logCookie('balh_mode');
  205. balh_blocked_vip = logCookie('balh_blocked_vip');
  206. alert("Cookie值已改變\n將重新加載頁面\n以重新載入腳本命令項目");
  207. unsafeWindow.location.reload(true);
  208. } else {
  209. console.log("Cookie值沒改變");
  210. }
  211. } else {
  212. console.log("執行失敗\n還未加載解除B站區域限制腳本");
  213. }
  214. }
  215.  
  216. function initFunction() {
  217. if (unsafeWindow.bangumi_aera_limit_hack) {
  218. balh_server = logCookie('balh_server');
  219. balh_mode = logCookie('balh_mode');
  220. balh_blocked_vip = logCookie('balh_blocked_vip');
  221. if (setDefaultValue(balh_mode) != 'default' && setDefaultValue(balh_mode) != 'replace' && setDefaultValue(balh_mode) != 'redirect') {
  222. console.log("Cookie值錯誤\n重設Cookie值");
  223. if (unsafeWindow.bangumi_aera_limit_hack.setCookie('balh_mode', '') && !unsafeWindow.bangumi_aera_limit_hack.getCookie('balh_mode')) {
  224. balh_mode = logCookie('balh_mode');
  225. console.log("成功重設Cookie值");
  226. } else {
  227. balh_mode = logCookie('balh_mode');
  228. console.log("重設Cookie值失敗");
  229. }
  230. }
  231. GM_registerMenuCommand('自定義服務器地址', changeServer);
  232. GM_registerMenuCommand('代理模式:' + modeText(setDefaultValue(balh_mode)), getMode);
  233. if (setDefaultValue(balh_mode) != 'default')
  234. GM_registerMenuCommand('更改代理模式為默認模式', setDefaultMode);
  235. if (setDefaultValue(balh_mode) != 'replace')
  236. GM_registerMenuCommand('更改代理模式為替換模式', setReplaceMode);
  237. if (setDefaultValue(balh_mode) != 'redirect')
  238. GM_registerMenuCommand('更改代理模式為重定向模式', setRedirectMode);
  239. if (balh_blocked_vip) {
  240. GM_registerMenuCommand('打開異步登錄登入頁面', unsafeWindow.bangumi_aera_limit_hack.login);
  241. GM_registerMenuCommand('打開異步登錄登出頁面', unsafeWindow.bangumi_aera_limit_hack.logout);
  242. GM_registerMenuCommand('關閉異步登錄', changeAsyncLogin);
  243. } else {
  244. GM_registerMenuCommand('打開異步登錄', changeAsyncLogin);
  245. }
  246. unsafeWindow.addEventListener('focus', checkCookie, false);
  247. document.addEventListener('visibilitychange', function() {
  248. if (!document.hidden) checkCookie();
  249. }, false);
  250. } else {
  251. console.log("執行失敗\n還未加載解除B站區域限制腳本");
  252. }
  253. }
  254.  
  255. function GM_wait(coun) {
  256. if (coun < 100) {
  257. console.log("第" + (coun + 1) + "次測試是否加載解除B站區域限制腳本");
  258. if (typeof unsafeWindow.bangumi_aera_limit_hack == 'undefined') {
  259. console.log("還未加載解除B站區域限制腳本\n延遲100毫秒");
  260. window.setTimeout(GM_wait(coun + 1), 100);
  261. } else {
  262. console.log("已加載解除B站區域限制腳本\n設置腳本命令");
  263. initFunction();
  264. }
  265. } else {
  266. console.log("已測試超過" + coun + "次還未加載\n放棄設置腳本命令");
  267. }
  268. }
  269. if (!unsafeWindow.bangumi_aera_limit_hack) {
  270. var bangumi_aera_limit_hack;
  271. console.log("還未加載解除B站區域限制腳本\n設置監聽");
  272. Object.defineProperty(unsafeWindow, 'bangumi_aera_limit_hack', {
  273. configurable: true,
  274. enumerable: true,
  275. set: function(v) {
  276. bangumi_aera_limit_hack = v;
  277. console.log("正在加載解除B站區域限制腳本\n設置腳本命令");
  278. initFunction();
  279. },
  280. get: function() {
  281. return bangumi_aera_limit_hack;
  282. }
  283. });
  284. } else {
  285. console.log("已加載解除B站區域限制腳本\n設置腳本命令");
  286. initFunction();
  287. }
  288. // GM_wait(0);
  289. }