English help on website



Web関連のサンプル(Ver9.59対応版)
目次− サンプル− Web関連のサンプル
WebView2 fetchで非同期だけど、awaitjsで同期化
//////////////////////////////////////////////////////////
//WebView2 fetchで非同期だけど、awaitjsで同期化
    jsmode "WebView2", 1;
    js {
        async function fetchPage() {
            //ここは非同期関数(awaitjsされていればマクロ実行中だけど、awaitjsが無ければマクロが終わった後に処理される)
            try {
                const response = await fetch('https://www.jma.go.jp/bosai/forecast/data/overview_forecast/130000.json');
                const json = await response.json();
                const result = json.text;
                hidemaru.setStaticVariable( 'result', result, -1);
            } catch (error) {
                hidemaru.setStaticVariable( 'result', 'エラー:' + error, -1);
            }
            hidemaru.notifyAwait('fetch');
        }
        fetchPage();
    }
    awaitjs "fetch";//hidemaru.notifyAwait('fetch');があるまでここで待機(Escでマクロ終了可能)
    $result = getstaticvariable("result", -1);
    message $result;
endmacro;

curlを使ったWebページ内容取得(JScript/非同期)
//////////////////////////////////////////////////////////
//curlを使ったWebページ内容取得(JScript/非同期)
hidemaruversion "9.25.13";
js{
  debuginfo(2);//console.logをアウトプット枠に出力
  console.log("----startmacro");

  exe=hidemaru.runProcess("curl.exe https://hide.maruo.co.jp/","","stdio");
  exe.stdOut.onReadAll=function(out){
    //ここはマクロ実行中ではない(けどV9.25以降ならinsertは可能)
    //insert(out);
	console.log(out);
  }

  console.log("----endmacro");
};
endmacro;

curlを使ったWebページ内容取得(WebView2/非同期/HTML中のテキスト)
//////////////////////////////////////////////////////////
//curlを使ったWebページ内容取得(WebView2/非同期/HTML中のテキスト)
newfile;
jsmode "WebView2";
js{
  debuginfo(2);//console.logをアウトプット枠に出力
  console.log("----startmacro");

  exe=hidemaru.runProcess("curl.exe https://hide.maruo.co.jp/","","stdio");
  exe.stdOut.onReadAll=function(out){
    //ここはマクロ実行中ではない
    document.body.innerHTML=out;
	console.log(document.body.innerText);
  }

  console.log("----endmacro");
};
endmacro;

JScript Msxml2.XMLHTTP(非同期ではない)
//////////////////////////////////////////////////////////
//JScript Msxml2.XMLHTTP(非同期ではない)
newfile;
js{
  debuginfo(2);//console.logをアウトプット枠に出力
  console.log("----startmacro");

  //レスポンス(非同期ではない)
  function syncResponse(){
      if(xhr.readyState==4 ) {
        if( xhr.status==200){
		  console.log(xhr.responseText);
        }
      }
  }

  var url = "https://hide.maruo.co.jp/";
  var xhr = hidemaru.createObject("Msxml2.XMLHTTP");
  xhr.onreadystatechange = syncResponse;
  xhr.open( "GET", url, true );
  xhr.send( null );  //ここで同期してsyncResponseを呼んでいる

  console.log("----endmacro");
}

endmacro;

WebView2 XMLHttpRequest(非同期)
//////////////////////////////////////////////////////////
//WebView2 XMLHttpRequest
//CORSがあるので、htmlはlocalhostを立てるか、
//パブリックなjsonのサーバー(例:https://www.jma.go.jp/bosai/forecast/data/overview_forecast/130000.json)が確認しやすい
jsmode "WebView2";
js{
  debuginfo(2);//console.logをアウトプット枠に出力
  console.log("----startmacro");

  function asyncResponse(){
      console.log("asyncResponse:"+xhr.readyState+":"+xhr.status);
      if(xhr.readyState==4 ) {
         console.log(xhr.status);
        if( xhr.status==200){
          console.log(xhr.responseText);
        }
      }
  }

  let url = "http://localhost:8080/";//!!! attention CORS !!!
  let xhr = new XMLHttpRequest();
  xhr.onreadystatechange = asyncResponse;
  xhr.open( "GET", url, true );
  xhr.send( null );

  console.log("----endmacro");
}

endmacro;

WebView2 fetch(非同期)
//////////////////////////////////////////////////////////
//WebView2 fetch
//CORSがあるので、htmlはlocalhostを立てるか、
//パブリックなjsonのサーバー(例:https://www.jma.go.jp/bosai/forecast/data/overview_forecast/130000.json)が確認しやすい

jsmode "WebView2";
js{
  debuginfo(2);//console.logをアウトプット枠に出力
  console.log("----startmacro");

  function asyncFunc(text){
    //ここはマクロ実行中ではない
    console.log(text);
  }

  fetch("http://localhost:8080/")
  .then(res => res.text())
  .then(text => asyncFunc(text));

  console.log("----endmacro");

}

////////////////////////////
//参考:localhostをnode.jsで立てる場合
//以下のコメント範囲は秀丸マクロではないです
/*
//node.js
const http = require("http");
const server = http.createServer((request, response) => {
    response.writeHead(200, {
      "Content-Type": "text/html",
      "Access-Control-Allow-Origin": "*",
    });
    setTimeout(function(){ response.end("Hello Slow Server"); },3000);
});
server.listen(8080);
*/

curlを使ったWebページ内容取得(JScript/同期/バージョン情報のみ)
//////////////////////////////////////////////////////////
//curlを使ったWebページ内容取得(JScript/同期/バージョン情報のみ)
js{message("秀丸エディタの最新版:"+hidemaru.runProcess("curl.exe https://hide.maruo.co.jp/software/hidemaru.ver","","stdio").stdOut.readAll(1000))};
endmacro;