47 lines
1.4 KiB
CoffeeScript
47 lines
1.4 KiB
CoffeeScript
requestID = 0
|
|
|
|
chrome.runtime.onMessage.addListener (request, sender, sendResponse) ->
|
|
id = requestID
|
|
requestID++
|
|
sendResponse id
|
|
handlers[request.type] request, (response) ->
|
|
chrome.tabs.sendMessage sender.tab.id, {id, data: response}
|
|
|
|
handlers =
|
|
permission: (request, cb) ->
|
|
origins = request.origins or ['*://*/']
|
|
chrome.permissions.contains {origins}, (result) ->
|
|
if result
|
|
cb result
|
|
else
|
|
chrome.permissions.request {origins}, (result) ->
|
|
if chrome.runtime.lastError
|
|
cb false
|
|
else
|
|
cb result
|
|
|
|
ajax: (request, cb) ->
|
|
xhr = new XMLHttpRequest()
|
|
xhr.open 'GET', request.url, true
|
|
xhr.responseType = request.responseType
|
|
xhr.timeout = request.timeout
|
|
for key, value of (request.headers or {})
|
|
xhr.setRequestHeader key, value
|
|
xhr.addEventListener 'load', ->
|
|
{status, statusText, response} = @
|
|
responseHeaderString = @getAllResponseHeaders()
|
|
if response and request.responseType is 'arraybuffer'
|
|
response = [new Uint8Array(response)...]
|
|
cb {status, statusText, response, responseHeaderString}
|
|
, false
|
|
xhr.addEventListener 'error', ->
|
|
cb {error: true}
|
|
, false
|
|
xhr.addEventListener 'abort', ->
|
|
cb {error: true}
|
|
, false
|
|
xhr.addEventListener 'timeout', ->
|
|
cb {error: true}
|
|
, false
|
|
xhr.send()
|