簡體   English   中英

Chrome擴展程序將數據發布到Rails服務器跨域XMLHttpRequest

[英]Chrome Extension Post Data to Rails Server Cross-Origin XMLHttpRequest

我目前正在嘗試開發一個chrome擴展程序,該擴展程序可以從https網頁檢索文本到我的僅處理http的服務器。 我已經研究了本教程和這個問題

從這些推論中,我得出結論,為了使跨源xhr工作,我需要

  1. 設置清單權限以包括我要定位的網址

為此,我的權限如下所示:

"permissions": [
    "tabs", "<all_urls>"
]

我輸入了特定的URL,但是在打包完我的並將我的URL更改為“ <all_urls>”之后,必須將其取出。

  1. 創建一個XMLHttpRequest到指定的URL

為此,我的代碼節選如下:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
   if (xhr.readyState == 4 && xhr.status == 200) {
        document.getElementById("response").innerText = xhr.responseText;
        console.log(xhr.responseText);
   }
};
xhr.open("POST", MY_SERVER_URL, true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(message.toString());

MY_SERVER_URL是我已經一遍又一遍檢查的有效URL,但是由於許多原因,我無法使用此問題指定;(

message是一個數組,其中包含一系列我想發送到服務器的不同消息。

  1. 打包我的擴展代碼並安裝

按照Google的打包指南 ,我已經將文件夾打包為.crx文件,並將其拖放到chrome://extensions頁面中進行安裝。

  1. 在我的服務器上,安裝了rack cors gem。

我在服務器的Gemfile中有以下行:

gem 'rack-cors', :require => 'rack/cors'

但是,當我嘗試將數據發送到服務器時,仍然收到以下錯誤消息

Mixed Content: The page at MESSAGE_PARSING_URL was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint MY_SERVER_URL. This request has been blocked; the content must be served over HTTPS.

我可能做錯了什么? 我真的很感謝您的幫助。 感謝:D

如果您從安全頁面(https)的內容腳本發出不安全(http)請求,則會收到“ Mixed Content錯誤。
您有3種解決方案:

  1. 從內容腳本向服務器發出安全請求
  2. 仍然使用不安全的請求,但是從后台腳本發出請求。 並使用消息傳遞將結果傳遞到您的內容腳本
  3. 使用--allow-running-insecure-content標志啟動chrome。 但這不是一個實用的解決方案,僅對開發有用(當您的暫存器位於http上時)。

您應該為服務器應用證書,並使用https代替。 根據W3C關於跨域資源共享的建議

  1. 資源的來源已列入黑名單。
  2. 已知資源的來源是Intranet的一部分。
  3. 不支持URL <方案>。
  4. 不允許https到http。
  5. 由於證書錯誤,不允許使用https

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM