読者です 読者をやめる 読者になる 読者になる

素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

GM_xmlhttpRequest風XMLHttpRequestラッパー

追追記:前にやつも直した。拡張機能向けだと、XHR — Gistがおすすめ。
追記:コメントで変数がグローバルになっていると指摘されたので直した。

function GM_xmlhttpRequestModoki(method,url,headers,data,onload,onerror,onreadystatechange){
  if (typeof method=="object")
    ({method,url,headers,data,onload,onerror,onreadystatechange})=method;
  var xhr=new XMLHttpRequest();
  xhr.open(method||(method=data?"post":"get"),url);
  onload&&(xhr.onload=function(){onload(this)});
  onerror&&(xhr.onerror=function(){onerror(this)});
  onreadystatechange&&(xhr.onreadystatechange=onreadystatechange);
  method=="post"&&xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  if(headers)
    for(var i in headers)
      if(headers.hasOwnProperty(i)) xhr.setRequestHeader(i,headers[i]);
  xhr.send(data||null);
}

追記ここまで。
{method,url…}=objでは、構文エラーになるので、({method,url…})=objとする必要がある。var {method,url…}=obj;でもいいけど、ちょっと格好が悪い。

function GM_xmlhttpRequestModoki(obj){
  var {method,url,headers,data,onload,onerror,onreadystatechange}=obj;
  var xhr=new XMLHttpRequest();
  xhr.open(method||(method=data?"post":"get"),url);
  onload&&(xhr.onload=function(){onload(this)});
  onerror&&(xhr.onerror=function(){onerror(this)});
  onreadystatechange&&(xhr.onreadystatechange=onreadystatechange);
  method=="post"&&xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  if(headers)
    for(var i in headers)
      if(headers.hasOwnProperty(i)) xhr.setRequestHeader(i,headers[i]);
  xhr.send(data||null);
}