Greasy Fork is available in English.

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

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

اعتبارا من 20-04-2017. شاهد أحدث إصدار.

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