【问题标题】:XMLHttpRequest working fine in content script but not in background script - Chrome extensionXMLHttpRequest 在内容脚本中工作正常但在后台脚本中不能正常工作 - Chrome 扩展
【发布时间】:2019-09-11 19:05:25
【问题描述】:

我正在将请求从内容脚本切换到后台脚本,代码相同,但不知何故 XMLHttpRequest 无法让我保持登录状态。

我的目标是登录用户并更改他的密码 - 这需要 2 个 POST 请求。第二个失败了。

后台脚本:

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    
    // FIRST REQUEST
    var loginRequest = new XMLHttpRequest();
    loginRequest.open("POST", "https://.../login.php", true);
    loginRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    loginRequest.send("user credentials...");

    loginRequest.onload = function() {

      // SECOND REQUEST
      var changeRequest = new XMLHttpRequest();
      changeRequest.open("POST", "https://.../changePassword", true);
      changeRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      changeRequest.send("old pass... new pass...");
      changeRequest.onload = function() {

        // ISSUE: changeRequest.responseURL is back at the login page? WHY?
        if (changeRequest.responseText.includes("Password successfully changed!")) {
          sendResponse({passwordChanged: true});
        } else {
          sendResponse({passwordChanged: false});
        }
      }
    }

    return true;

});

请注意:此代码在内容脚本中运行良好!

【问题讨论】:

  • 内容脚本重用了来自网页的 cookie(我猜这些是会话 cookie),因此在后台脚本中执行请求时,您需要在传出请求上设置相同的 cookie,可能通过阅读文档内容脚本中的.cookie,将相关cookies发送到后台脚本,然后通过chrome.webRequest.onBeforeSendHeaders设置'extraHeaders'参数,找例子。
  • 也有可能该站点正在检查 Referer 标头,因此您必须使用带有“extraHeaders”参数的 chrome.webRequest.onBeforeSendHeaders 手动设置它。
  • 按照你说的做了,还是不行...我比较了内容脚本和后台脚本中的请求和响应标头,它们是相同的。
  • Referer 标头也一样吗?也可以尝试在 Fiddler 或 mitmproxy 等单独的工具中进行检查。
  • 这听起来可能很疯狂,但是当我删除所有 cookie 时我成功了...然后我意识到这可以在没有整个 webRequest API 的情况下仅使用 1 EXTRA LINE 来完成,使用 loginRequest.anonymous = true; 这甚至没有出现在文档中。

标签: google-chrome-extension xmlhttprequest


【解决方案1】:
loginRequest.anonymous = true;

已解决从后台脚本发送时由于不必要的 cookie 导致的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2011-12-21
    • 2021-05-06
    相关资源
    最近更新 更多