2015-06-20 88 views
0

我一直在創建下載管理器,它接收來自chrome擴展的文件名和下載鏈接。
在這種情況下,我決定使用javascript後臺頁面發送XMLHttpRequest到環回,並創建簡單的服務器來接收消息的背景頁面是這樣的。無法從HttpListenerRequest讀取InputStream

background.js

function showMessageBox(info, tab) { 
    var link = decodeURIComponent(info.linkUrl); 
    var index = link.search(/[^/\\\?]+\.\w{3,4}(?=([\?&].*$|$))/); 
    var fileName = link.substring(index); 
    alert("will download from " + link + " soon\n File name : " + fileName); 
    SendMessage(fileName,link); 
} 
function SendMessage(fileName, link) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST","http://localhost:6230", false); 
    xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8"); 
    var JSONstring = JSON.stringify({ FileName: fileName, DownloadLink: link }); 
    xhr.send(JSONstring); 
} 

和服務器的一部分。

private void StartReciever() 
    { 
     while (true) 
     { 
      var fileInfo = GetFileInfo(); 
      Execute.OnUIThread(() => WindowManager.ShowDialog(
       new NewDownloadViewModel(WindowManager, EventAggregator, fileInfo, Engine))); 
     } 
    } 

    private FileInfo GetFileInfo() 
    { 
     using (var listener = new HttpListener()) 
     { 
      listener.Prefixes.Add("http://localhost:6230/"); 
      listener.Start(); 
      var requestContext = listener.GetContext(); 
      /*var streamReader = new StreamReader(requestContext.Request.InputStream, requestContext.Request.ContentEncoding); 
      string jsonString = streamReader.ReadToEnd();*/ 
      var stream = requestContext.Request.InputStream; 
      byte[] buffer = new byte[10240]; 
      var readbyte = stream.Read(buffer, 0, 102400); 
      string ss = Encoding.UTF8.GetString(buffer, 0, readbyte); 
      // deserialize string to object 

      return new FileInfo(); 
     } 
    } 

我想知道爲什麼流發送消息發送時總是返回0。

回答

1

最後,我發現我忘了!

根據Same-origin policy,我無法發送http請求到不同的服務器。
我必須使用Cross-Origin XMLHttpRequest與不同來源的服務器進行通信。

要做到這一點,我需要Request cross-origin permissions通過添加主機名權限部分。
在我的情況下,我看起來像這樣。

"permissions": [ 
"contextMenus", 
"http://localhost/", 
"nativeMessaging" 
] 

現在,我可以接收字符串並將其反序列化。