Chrome onBeforeSendHeaders未捕获FTP请求

时间:2017-04-12 07:15:39

标签: google-chrome-extension ftp

我正在开发一个Chrome扩展程序,它会在请求中添加授权标题

为此,我使用了 onBeforeSendHeaders ,但不幸的是,它不适用于 FTP 请求。我已经在清单和背景中给予了许可

清单权限说:

 "permissions": [
    "webRequest",
    "webRequestBlocking",
    "webNavigation",
    "tabs",
    "cookies",
    "ftp://*/*",
    "*://*/*"
  ]

我使用了 onBeforeSendHeaders

chrome.webRequest.onBeforeSendHeaders.addListener(
      function(details) {
        if(details.url == "my_url"){       
               details.requestHeaders.push({'name':'Authorization','value':'my_value'});
                    return { requestHeaders: details.requestHeaders };
         }        
       },
    {urls: ['<all_urls>','ftp://*/*']},
    [ 'blocking', 'requestHeaders']
    );
 callback(true);
}

如果我无法在Chrome中打开FTP;有没有其他方法,我可以使用一个命令(如ssh user@host -pw pass)在终端或putty中打开FTP?

1 个答案:

答案 0 :(得分:1)

onAuthRequired 是解决方案,并为我工作:

var target = "ftp://ftpurl/";

var myCredentials = {
  username: "username",
  password: "pass"
};

var pendingRequests = [];

// A request has completed.
// We can stop worrying about it.
function completed(requestDetails) {
  console.log("completed: " + requestDetails.requestId);
  var index = pendingRequests.indexOf(requestDetails.requestId);
  if (index > -1) {
    pendingRequests.splice(index, 1);
  }
}

function provideCredentialsSync(requestDetails) {

  // If we have seen this request before, then
  // assume our credentials were bad, and give up.
  if (pendingRequests.indexOf(requestDetails.requestId) != -1) {
    console.log("bad credentials for: " + requestDetails.requestId);
    return {cancel:true};
  }
  pendingRequests.push(requestDetails.requestId);
  console.log("providing credentials for: " + requestDetails.requestId);
  return {authCredentials: myCredentials};
}

chrome.webRequest.onAuthRequired.addListener(
    provideCredentialsSync,
    {urls: [target]},
    ["blocking"]
  );

chrome.webRequest.onCompleted.addListener(
  completed,
  {urls: [target]}
);

chrome.webRequest.onErrorOccurred.addListener(
  completed,
  {urls: [target]}
);              

} 
相关问题