WebSocket API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Google Chrome рдХрд╛ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди

рдЫрд╡рд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдирд╛ рджрд┐рд▓ рдХреЗ рдмреЗрд╣реЛрд╢ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдХрднреА рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ: рд▓рдЧрднрдЧ рдЖрдзрд╛ рджрд░реНрдЬрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдкреАрдЖрдИ, рд╡рд┐рднрд┐рдиреНрди рдЖрдИрдкреАрд╕реА рддрдВрддреНрд░ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд╖рдорддрд╛рдПрдВред WebDriver рдЬреИрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрд╕ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, WebKit рдпрд╛ рдЕрдиреНрдп рдЗрдВрдЬрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрдЬрдиреЛрдВ рдЕрдиреНрдп "рд╣реЗрдбрд▓реЗрд╕" рдбреНрд░рд╛рдЗрд╡рд░ рд╡реЗрдм рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП W3C рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рдЧреВрдЧрд▓ рдХреНрд░реЛрдо


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдмрдирд╛рддреЗ рд╕рдордп рдпрд╣ рдПрдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдп рд╣реИ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ Chrome рдХреЛ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЗрдЯреЗрдВрд╕реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп рдЦреЛрдЬрд╛ рдерд╛ред рд╕рдВрд╕реНрдХрд░рдг 18 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдХреНрд░реЛрдо рдЕрдм рджреВрд░рд╕реНрде рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ v1.0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ , рдЬреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡реЗрдмрд╕реНрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ!
/Applications/Path To/Google Chrome --remote-debugging-port=9222 # OSX $> curl localhost:9222/json 

 [ { "devtoolsFrontendUrl": "/devtools/devtools.html?host=localhost:9222&page=1", "faviconUrl": "", "thumbnailUrl": "/thumb/chrome://newtab/", "title": "New Tab", "url": "chrome://newtab/", "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/1" } ] 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо Chrome рдореЗрдВ рджреВрд░рд╕реНрде рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо)ред рдЕрдм рд╕реЗ, Chrome рдПрдХ HTTP рд╕рд░реНрд╡рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рднреА рдЦреБрд▓реЗ рдЯреИрдм рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЯреИрдм рдПрдХ рдЕрд▓рдЧ-рдерд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ WebSocket рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрде WebSocketDebuggerUrl рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реИред рдЖрдЗрдП рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ (рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рд░реВрдмреА рдореЗрдВ рдХреЛрдбрд┐рдВрдЧ рдХреЛрдб, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реИ):
 require 'em-http' require 'faye/websocket' require 'json' EM.run do # Chrome runs an HTTP handler listing available tabs conn = EM::HttpRequest.new('http://localhost:9222/json').get conn.callback do resp = JSON.parse(conn.response) puts "#{resp.size} available tabs, Chrome response: \n#{resp}" # connect to first tab via the WS debug URL ws = Faye::WebSocket::Client.new(resp.first['webSocketDebuggerUrl']) ws.onopen = lambda do |event| # once connected, enable network tracking ws.send JSON.dump({id: 1, method: 'Network.enable'}) # tell Chrome to navigate to twitter.com and look for "chrome" tweets ws.send JSON.dump({ id: 2, method: 'Page.navigate', params: {url: 'http://twitter.com/#!/search/chrome?q=chrome&' + rand(100).to_s} }) end ws.onmessage = lambda do |event| # print event notifications from Chrome to the console p [:new_message, JSON.parse(event.data)] end end end 


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо Chrome рдХреЛ рдЯреНрд░реИрдХрд┐рдВрдЧ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рд╕реВрдЪрдирд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ Twitter рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, Chrome рд╣рдореЗрдВ рджрд░реНрдЬрдиреЛрдВ рдиреЗрдЯрд╡рд░реНрдХ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬреЗрдЧрд╛: рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреГрд╖реНрда рд▓рд╛рдиреЗ, рдкреНрд░рддреНрдпреЗрдХ рдЙрдк-рд╕рдВрд╕рд╛рдзрди, XHR рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдирд╛рдПрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Network.responseReceived рдИрд╡реЗрдВрдЯ )ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк рд╡реЗрдм рдкреЗрдЬ рдХреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирдП рдЯреНрд╡реАрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд▓рдВрдмреА рдорддрджрд╛рди рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреА рджреЗрдЦреЗрдВрдЧреЗред рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЯрди , рд╕рдм рдХреБрдЫ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рд╣реИред

Chrome рдХреЗ рд╕рд╛рде рджреВрд░рд╕реНрде рдбрд┐рдмрдЧрд┐рдВрдЧ (рдФрд░ рдЕрдзрд┐рдХ)


рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдиреЗрдЯрд╡рд░реНрдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдмрд╛рддрдЪреАрдд рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреАрдмрдЧрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, V8 рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, DOM рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдШрдЯрдирд╛рдУрдВ рдХреЗ рдХрд╛рд▓рдХреНрд░рдо рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдзрд╛ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рднреА ред рдЕрдВрдд рдореЗрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдбреЗрд╕реНрдХрдЯреЙрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЖрдкрдХреЗ рдлрд╝реЛрди рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ: Android рдХреЗ рд▓рд┐рдП Chrome рд╕рднреА рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ред

Source: https://habr.com/ru/post/In141981/


All Articles