2013-05-03 2 views
3

Можно ли преобразовать «ArrayBuffer» в некоторый «читаемый» формат, такой как JSON?Возможно преобразование «ArrayBuffer» в некоторый «читаемый» формат, например, JSON? - Расширение Chrome

Тестовый сценарий:

<script> 
try { 
    http = new ActiveXObject("Microsoft.XMLHTTP"); // Trying IE 
} 
catch(e) // Failed, use standard object 
{ 
    http = new XMLHttpRequest(); 
} 

var url = "http://localhost/test.htm"; 
var params = "param=abc&param2=62"; 
http.open("POST", url, true); 

http.onreadystatechange = function() {//Call a function when the state changes. 
    if(http.readyState == 4 && http.status == 200) { 
     alert('send..'); 
    } 
} 
http.send(params); 
</script> 

на фоне (расширение хром) Запрос СЛУШАТЕЛЬ: (XHR получить от Test.htm)

chrome.webRequest.onBeforeRequest.addListener(
    function(details) { 
     console.log(details); 
}, 
{ 
urls: ["*://localhost/*"] 
}, 
['requestBody']); 

console.log результата :

Object {frameId: 0, method: "POST", parentFrameId: -1, requestBody: Object, requestId: "12981"…} 
frameId: 0 
method: "POST" 
parentFrameId: -1 
requestBody: Object 
raw: Array[1] 
0: Object 
bytes: ArrayBuffer 
byteLength: 32 
__proto__: ArrayBuffer 
constructor: function ArrayBuffer() { [native code] } 
slice: function slice() { [native code] } 
__proto__: Object 
__proto__: Object 
length: 1 
__proto__: Array[0] 
__proto__: Object 
requestId: "12981" 
tabId: 180 
timeStamp: 1367604574726.125 
type: "xmlhttprequest" 
url: "http://localhost/test.htm" 
__proto__: Object 

Мне нужно преобразовать details.requestBody.raw обратно в param = abc & param2 = 62 или JSON. Спасибо

http://developer.chrome.com/dev/extensions/webRequest.html

+0

возможно дубликат [расширение Chrome: как передать ArrayBuffer или Blob от содержания сценария в фоновом режиме без потери его тип?] (http://stackoverflow.com/questions/8593896/chrome-extension-how-to-pass-arraybuffer-or-blob-from-content-script-to-the-bac) –

+0

когда-нибудь решают это? – K2xL

ответ

0

Я использую, что Lib - https://github.com/vicetjs/array-buffer-to-data

chrome.webRequest.onBeforeRequest.addListener(
    function(details) { 
     try { 
      if (details && details.type === "xmlhttprequest" && 
       var buffer = details.requestBody.raw[0].bytes; 
       console.log(arrayBufferToData.toJSON(buffer));//JSON payload body 
      } 
      return {requestHeaders: details.requestHeaders}; 
     } catch(e) { 
      console.log(e.stack); 
     } 
    }, 
    {urls: ["<all_urls>"]}, 
    ["requestBody"]); 
Смежные вопросы