【问题标题】:Chrome Extension XMLHttpRequest returning 0 using HTTPS and non-conventional portChrome 扩展 XMLHttpRequest 使用 HTTPS 和非常规端口返回 0
【发布时间】:2015-03-22 15:15:11
【问题描述】:

我正在使用此函数向使用HTTPS 和非常规端口的服务器发送XHR 请求:https://www.example.com:10000/request.php

function AJAXInteraction(url, callback, str) {
  var xhr = new XMLHttpRequest();
  xhr.open("POST", url, true);
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
       var resp = JSON.parse(xhr.responseText);
       approveResponse (resp);
    }
  }
  xhr.send(str);
}

在我的manifest 中,我已将权限设置为"*://*/*"

{
  "name": "Test Extension",
  "manifest_version": 2,
  "version": "2.0",
  "description": "Extension Admin Util.",
  "devtools_page": "background.html",
  "content_scripts": [
    { "matches": ["http://*/*"], "js": ["content_script.js"] }
  ],
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "permissions": [
    "*://*/*",
    "tabs"
  ]
}

XHR 正在返回 0 并使用开发者工具的“网络”选项卡显示它是 cancelled

我做错了什么?

【问题讨论】:

  • 附言。您的问题缺少一个问题。另外,您能否在 Chrome 的 Dev/Canary 版本中对其进行测试,以确保它不是已经修复的错误?
  • 服务器使用什么样的证书?你的浏览器信任它吗?
  • 它是自签名的,但浏览器信任它(https 符号为绿色)
  • 你是怎么调用AJAXInteraction函数的?
  • @javsmo -> var ajax = new AJAXInteraction(url, approveResponse, querystr);

标签: javascript google-chrome-extension xmlhttprequest


【解决方案1】:

我认为非常规端口不是问题。

当我在链接或按钮事件上发出请求并且我没有删除事件的默认操作并且页面更改并取消 AJAX 请求时,通常会发生这种情况。

如果这是您的问题,请在您的点击事件中使用event.preventDefault();,如下所示。

$('a.action-foo').click(function(event){
    event.preventDefault();
    //Make your AJAX request
});

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 2011-06-08
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多