wsHook.js

websocket 扩展

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/460824/1154735/wsHookjs.js

  1. /* eslint-disable no-proto */
  2. /* eslint-disable accessor-pairs */
  3. /* eslint-disable no-global-assign */
  4.  
  5. /* wsHook.js
  6. * https://github.com/skepticfx/wshook
  7. * Reference: http://www.w3.org/TR/2011/WD-websockets-20110419/#websocket
  8. */
  9.  
  10. var wsHook = {};
  11. (function () {
  12. // Mutable MessageEvent.
  13. // Subclasses MessageEvent and makes data, origin and other MessageEvent properites mutatble.
  14. function MutableMessageEvent (o) {
  15. this.bubbles = o.bubbles || false
  16. this.cancelBubble = o.cancelBubble || false
  17. this.cancelable = o.cancelable || false
  18. this.currentTarget = o.currentTarget || null
  19. this.data = o.data || null
  20. this.defaultPrevented = o.defaultPrevented || false
  21. this.eventPhase = o.eventPhase || 0
  22. this.lastEventId = o.lastEventId || ''
  23. this.origin = o.origin || ''
  24. this.path = o.path || new Array(0)
  25. this.ports = o.parts || new Array(0)
  26. this.returnValue = o.returnValue || true
  27. this.source = o.source || null
  28. this.srcElement = o.srcElement || null
  29. this.target = o.target || null
  30. this.timeStamp = o.timeStamp || null
  31. this.type = o.type || 'message'
  32. this.__proto__ = o.__proto__ || MessageEvent.__proto__
  33. }
  34.  
  35. var before = wsHook.before = function (data, url, wsObject) {
  36. return data
  37. }
  38. var after = wsHook.after = function (e, url, wsObject) {
  39. return e
  40. }
  41. var modifyUrl = wsHook.modifyUrl = function(url) {
  42. return url
  43. }
  44. wsHook.resetHooks = function () {
  45. wsHook.before = before
  46. wsHook.after = after
  47. wsHook.modifyUrl = modifyUrl
  48. }
  49.  
  50. var _WS = WebSocket
  51. WebSocket = function (url, protocols) {
  52. var WSObject
  53. url = wsHook.modifyUrl(url) || url
  54. this.url = url
  55. this.protocols = protocols
  56. if (!this.protocols) { WSObject = new _WS(url) } else { WSObject = new _WS(url, protocols) }
  57.  
  58. var _send = WSObject.send
  59. WSObject.send = function (data) {
  60. arguments[0] = wsHook.before(data, WSObject.url, WSObject) || data
  61. _send.apply(this, arguments)
  62. }
  63.  
  64. // Events needs to be proxied and bubbled down.
  65. WSObject._addEventListener = WSObject.addEventListener
  66. WSObject.addEventListener = function () {
  67. var eventThis = this
  68. // if eventName is 'message'
  69. if (arguments[0] === 'message') {
  70. arguments[1] = (function (userFunc) {
  71. return function instrumentAddEventListener () {
  72. arguments[0] = wsHook.after(new MutableMessageEvent(arguments[0]), WSObject.url, WSObject)
  73. if (arguments[0] === null) return
  74. userFunc.apply(eventThis, arguments)
  75. }
  76. })(arguments[1])
  77. }
  78. return WSObject._addEventListener.apply(this, arguments)
  79. }
  80.  
  81. Object.defineProperty(WSObject, 'onmessage', {
  82. 'set': function () {
  83. var eventThis = this
  84. var userFunc = arguments[0]
  85. var onMessageHandler = function () {
  86. arguments[0] = wsHook.after(new MutableMessageEvent(arguments[0]), WSObject.url, WSObject)
  87. if (arguments[0] === null) return
  88. userFunc.apply(eventThis, arguments)
  89. }
  90. WSObject._addEventListener.apply(this, ['message', onMessageHandler, false])
  91. }
  92. })
  93.  
  94. return WSObject
  95. }
  96. })();

QingJ © 2025

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