- 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;