My Novel Reader.db

这是 小说阅读脚本 的自定义配置文件,脚本地址:https://gf.qytechs.cn/scripts/292/

  1. // ==UserScript==
  2. // @id MyNovelReaderDB@gmail.com
  3. // @name My Novel Reader.db
  4. // @version 1.4
  5. // @namespace MyNovelReaderDB@gmail.com
  6. // @author ywzhaiqi@gmail.com
  7. // @description 这是 小说阅读脚本 的自定义配置文件,脚本地址:https://gf.qytechs.cn/scripts/292/
  8. // @grant none
  9.  
  10. // @include http*://*.htm
  11. // @include http*://*.html
  12. // @include http*://*.shtm
  13. // @include http*://*.shtml
  14. // @include http*://*.aspx
  15. // @include http://www.jjwxc.net/onebook.php*
  16. // @include http://www.wcxiaoshuo.com/wcxs-*
  17. // @include http://www.shuhe.cc/*/*/
  18. // @include http://www.zhuzhudao.com/txt/*/*/
  19. // @include http://www.tadu.com/book/*
  20. // @include http://www.qishuwu.com/*
  21. // @include http://www.3gsc.com.cn/*
  22. // @include http://xs321.net/*
  23. // @include http://www.zhaoxiaoshuo.com/chapter-*
  24.  
  25. // @exclude */List.html
  26. // @exclude */List.shtml
  27. // @exclude */index.html
  28. // @exclude */index.shtml
  29. // @exclude http*://bbs*
  30. // @exclude http*://*/viewforum*
  31. // @exclude http*://*/viewtopic*
  32. // @run-at document-end
  33. // ==/UserScript==
  34.  
  35. /*
  36. 部分代码来自 Super_preloader
  37. */
  38.  
  39. var config = {
  40. soduso: false, // www.sodu.so 跳转
  41. content_replacements: true, // 小说屏蔽字修复
  42. fixImageFloats: true, // 图片居中修正
  43. paragraphBlank: true, // 统一段落开头的空格为 2个全角空格
  44. end_color: "#666666", // 最后一页的 链接颜色
  45. };
  46.  
  47.  
  48. /**
  49. * 注意:
  50. * 1、自定义规则,优先级最高。
  51. * 2、小说阅读脚本只限定在一些网站(非全局),故你所添加的规则可能无法生效。
  52. * 解决方法:反馈给作者或在 Greasemonkey/Scriptish 脚本管理处加入。
  53. * 3、如果定义了站点规则会让内置的同个站点的规则失效
  54. * 4、格式要正确,后面要有,
  55. */
  56.  
  57. var SITE_INFO = [
  58. // 极简版规则
  59. {
  60. name: "纵横中文网",
  61. url: "^http://book\\.zongheng\\.com/\\S+\\/\\d+\\.html$",
  62. contentPatch: function(fakeStub){
  63. // 去除隐藏文字
  64. fakeStub.find('.watermark').remove();
  65. }
  66. },
  67. /**
  68. * 特殊规则,内容用js生成。需要用 iframe 方式或补丁方式(二选一)。
  69. * 下面的起点中文也是如此,但采用另一种补丁的方式。
  70. * iframe方式简单,补丁方式需要分析代码(绿色无污染)。
  71. */
  72. // {
  73. // name: "读读看",
  74. // url: "^http://www\\.dudukan\\.net/html/.*\\.html$",
  75. // exampleUrl: "http://www.dudukan.net/html/90/90733/19323854.html",
  76. // contentReplace: "看小说.*|binhuo|www\\.92to\\.com",
  77. // useiframe: true,
  78. // timeout: 500 // 要等待js把内容生成出来,单位毫秒
  79. // },
  80.  
  81. // 详细版规则
  82. {
  83. // 没什么作用,随意起名
  84. name: "起点中文网",
  85.  
  86. // 匹配的地址,正则。2种形式都可以
  87. url: "^http://read\\.qidian\\.com/\\S+/\\d+,\\d+.aspx$",
  88.  
  89. // (可选)标题正则
  90. titleReg: "小说:(.*?)独家首发\\/(.*?)\\/.*",
  91. // (可选)0或1,代表书名的位置,另一个是章节位置
  92. titlePos: 0,
  93.  
  94. // (可选)首页jQuery选择器
  95. indexSelector: ".pageopt a:contains('回目录')",
  96. // (可选)上一页jQuery选择器
  97. prevSelector: "a#PrevLink",
  98. // (可选)下一页jQuery选择器
  99. nextSelector: "a#NextLink",
  100.  
  101. // (可选)内容jQuery选择器
  102. contentSelector: "#content",
  103. // (可选)内容移除,正则表达式
  104. contentReplace: "起点中文网|www\\.qidian\\.com|欢迎广大书友.*",
  105.  
  106. // (可选)下面2个一起。如果加载的下一页没有成功,则设置这个为true或用下面的补丁。
  107. useiframe: false,
  108. timeout: 0, // 延迟(毫秒),要等页面的js运行完毕才能获取到内容。
  109.  
  110. // (可选)补丁,对页面的提前处理,fakeStub 为 $(document) 对象
  111. contentPatch: function(fakeStub){
  112. fakeStub.find('div#content script:first').addClass('reader-ajax');
  113. }
  114. },
  115. ];
  116.  
  117.  
  118.  
  119. // 自定义到此为止,下面的不要修改
  120.  
  121. var readerData = {
  122. config: config,
  123. SITE_INFO: SITE_INFO
  124. };
  125.  
  126.  
  127. var JSONString = xToString(readerData);
  128. var postString = 'MyNovelReader.db' + JSONString;
  129.  
  130. postData();
  131.  
  132. window.addEventListener('message', function(e) {
  133. var data = e.data;
  134. switch (data) {
  135. case 'fromeMyNovelReader.post':
  136. postData();
  137. break;
  138. case 'fromeMyNovelReader.remove':
  139. // alert('remove');
  140. window.removeEventListener('message', arguments.callee, false); //释放闭包.
  141. break;
  142. default:
  143. break;
  144. }
  145. }, false);
  146.  
  147.  
  148. function postData() {
  149. window.postMessage(postString, '*');
  150. }
  151.  
  152. function xToString(x) { //任何转字符串.
  153. function toStr(x) {
  154. //alert(typeof x);
  155. switch (typeof x) {
  156. case 'undefined':
  157. {
  158. return Str(x);
  159. }
  160. break;
  161. case 'boolean':
  162. {
  163. return Str(x);
  164. }
  165. break;
  166. case 'number':
  167. {
  168. return Str(x);
  169. }
  170. break;
  171. case 'string':
  172. {
  173. return ('"' +
  174. (x.replace(/(?:\r\n|\n|\r|\t|\\|")/g, function(a) {
  175. var ret;
  176. switch (a) { //转成字面量
  177. case '\r\n':
  178. {
  179. ret = '\\r\\n'
  180. }
  181. break;
  182. case '\n':
  183. {
  184. ret = '\\n';
  185. }
  186. break;
  187. case '\r':
  188. {
  189. ret = '\\r'
  190. }
  191. break;
  192. case '\t':
  193. {
  194. ret = '\\t'
  195. }
  196. break;
  197. case '\\':
  198. {
  199. ret = '\\\\'
  200. }
  201. break;
  202. case '"':
  203. {
  204. ret = '\\"'
  205. }
  206. break;
  207. default:
  208. {}
  209. break;
  210. };
  211. return ret;
  212. })) + '"');
  213. //'"'+x.replace(/\\/g,'\\\\').replace(/"/g,'\\"')+'"';
  214. }
  215. break;
  216. case 'function':
  217. {
  218. /*
  219. var fnName=x.name;
  220. if(fnName && fnName!='anonymous'){
  221. return x.name;
  222. }else{
  223. var fnStr=Str(x);
  224. return fnStr.indexOf('native code')==-1? fnStr : 'function(){}';
  225. };
  226. */
  227. var fnStr = Str(x);
  228. return fnStr.indexOf('native code') == -1 ? fnStr : 'function(){}';
  229. }
  230. break;
  231. case 'object':
  232. { //注,object的除了单纯{},其他的对象的属性会造成丢失..
  233. if (x === null) {
  234. return Str(x);
  235. };
  236. //alert(x.constructor);
  237. switch (x.constructor) {
  238. case Object:
  239. {
  240. var i;
  241. var rStr = '';
  242. for (i in x) {
  243. //alert(i);
  244. if (!x.hasOwnProperty(i)) { //去掉原型链上的属性.
  245. //alert(i);
  246. continue;
  247. };
  248. rStr += toStr(i) + ':' + toStr(x[i]) + ',';
  249. };
  250. return ('{' + rStr.replace(/,$/i, '') + '}');
  251. }
  252. break;
  253. case Array:
  254. {
  255. var i;
  256. var rStr = '';
  257. for (i in x) {
  258. //alert(i);
  259. if (!x.hasOwnProperty(i)) { //去掉原型链上的属性.
  260. //alert(i);
  261. continue;
  262. };
  263. rStr += toStr(x[i]) + ',';
  264. };
  265. return '[' + rStr.replace(/,$/i, '') + ']';
  266. }
  267. break;
  268. case String:
  269. {
  270. return toStr(Str(x));
  271. }
  272. break;
  273. case RegExp:
  274. {
  275. return Str(x);
  276. }
  277. break;
  278. case Number:
  279. {
  280. return Str(x);
  281. }
  282. break;
  283. case Boolean:
  284. {
  285. return Str(x);
  286. }
  287. break;
  288. default:
  289. {
  290. //alert(x.constructor);//漏了什么类型么?
  291. }
  292. break;
  293. };
  294. }
  295. break;
  296. default:
  297. break;
  298. };
  299. };
  300. var Str = String;
  301. return toStr(x);
  302. }

QingJ © 2025

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