「最新版を確認」の版間の差分
ナビゲーションに移動
検索に移動
URLの正規表現を修正、ソースコードの整形 |
URLのマッチング条件を修正、変数の宣言を分割 |
||
| (同じ利用者による、間の7版が非表示) | |||
| 4行目: | 4行目: | ||
== ソースコード == | == ソースコード == | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript" copy> | ||
#title = "最新版を確認" | #title = "最新版を確認" | ||
#tooltip = "Meryの最新版があるか確認します。" | #tooltip = "Meryの最新版があるか確認します。" | ||
| 16行目: | 16行目: | ||
// https://learn.microsoft.com/ja-jp/windows/win32/winhttp/retrieving-data-using-script | // https://learn.microsoft.com/ja-jp/windows/win32/winhttp/retrieving-data-using-script | ||
function getText(strURL) { | function getText(strURL) { | ||
var strResult; | var strResult = ""; | ||
try { | try { | ||
// Create the WinHTTPRequest ActiveX Object. | // Create the WinHTTPRequest ActiveX Object. | ||
| 22行目: | 22行目: | ||
// Create an HTTP request. | // Create an HTTP request. | ||
WinHttpReq.Open("GET", strURL, false); | |||
// Send the HTTP request. | // Send the HTTP request. | ||
| 30行目: | 30行目: | ||
strResult = WinHttpReq.ResponseText; | strResult = WinHttpReq.ResponseText; | ||
} catch (objError) { | } catch (objError) { | ||
strResult = objError + "\n"; | strResult = objError.message + "\n"; | ||
strResult += "WinHTTP returned error: " + (objError.number & 0xFFFF).toString() + "\n\n"; | strResult += "WinHTTP returned error: " + (objError.number & 0xFFFF).toString(16) + "\n\n"; | ||
strResult += objError.description; | strResult += objError.description; | ||
} | } | ||
| 45行目: | 45行目: | ||
b = b.split('.'); | b = b.split('.'); | ||
var ia | var ia = 0; | ||
var ib = 0; | |||
var limit = Math.max(a.length, b.length); | var limit = Math.max(a.length, b.length); | ||
while (limit--) { | while (limit--) { | ||
ia = parseInt(a.shift() || 0); | ia = parseInt(a.shift() || 0, 10); | ||
ib = parseInt(b.shift() || 0); | ib = parseInt(b.shift() || 0, 10); | ||
if (ia != ib) { | if (ia != ib) { | ||
| 56行目: | 57行目: | ||
} | } | ||
return eval([ia, op, ib].join(' ')); | return eval([ia || 0, op, ib || 0].join(' ')); | ||
} | } | ||
| 65行目: | 66行目: | ||
// マッチングの修正 | // マッチングの修正 | ||
var m = res.replace(/[\n\r]/g, "").match(/<a href="(https:\/\/www.haijin-boys.com\/software\/mery\/mery-\d-\d-\d)" title="テキストエディター「Mery」ベータ版 | var m = res.replace(/[\n\r]/g, "").match(/<a href="(https:\/\/www\.haijin-boys\.com\/software\/mery\/mery-\d-\d-\d{1,2})" title="テキストエディター「Mery」ベータ版 v(\d\.\d\.\d{1,2}) を公開" rel="bookmark">/); | ||
if (!m) { | |||
window.alert("バージョンの確認ができませんでした。"); | |||
return; | |||
} | |||
var new_uri = m[1]; | var new_uri = m[1]; | ||
| 72行目: | 77行目: | ||
// 最新のバージョンか確認 | // 最新のバージョンか確認 | ||
if (version(editor.Version, "<", new_version)) { | if (version(editor.Version, "<", new_version)) { | ||
var mes = " | var mes = "最新のバージョンが見つかりました。\nWebサイトを開きますか?\n\n現在のVer " + editor.Version + "\n最新のVer " + new_version; | ||
if (confirm(mes)) { | if (confirm(mes)) { | ||
var Shell = new ActiveXObject("WScript.Shell"); | var Shell = new ActiveXObject("WScript.Shell"); | ||
| 78行目: | 83行目: | ||
} | } | ||
} else { | } else { | ||
window.alert("最新のバージョンがインストールされています。"); | window.alert("最新のバージョンがインストールされています。\n\n現在のVer " + editor.Version + "\n最新のVer " + new_version); | ||
} | } | ||
} | } | ||
| 86行目: | 91行目: | ||
checkUpdate(); | checkUpdate(); | ||
} catch (e) { | } catch (e) { | ||
window.alert( | window.alert(e.message); | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
2026年4月19日 (日) 02:02時点における最新版
Meryの最新版の有無をHaijin Boys Online(開発者のブログ)から確認します。
「イベントで実行」を設定しておけば自動的に確認することが出来ますが、「スクロールした時」など頻繁に実行されるイベントを設定するとサーバーに優しくないので、「アクティブな文書が変更された時」などがおすすめです。
ソースコード[編集]
#title = "最新版を確認"
#tooltip = "Meryの最新版があるか確認します。"
/*
Copyright (c) 2016 diaphragm. All rights reserved.
Licensed under the MIT License.
*/
// スクリプトを使用したデータの取得
// https://learn.microsoft.com/ja-jp/windows/win32/winhttp/retrieving-data-using-script
function getText(strURL) {
var strResult = "";
try {
// Create the WinHTTPRequest ActiveX Object.
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
// Create an HTTP request.
WinHttpReq.Open("GET", strURL, false);
// Send the HTTP request.
WinHttpReq.Send();
// Retrieve the response text.
strResult = WinHttpReq.ResponseText;
} catch (objError) {
strResult = objError.message + "\n";
strResult += "WinHTTP returned error: " + (objError.number & 0xFFFF).toString(16) + "\n\n";
strResult += objError.description;
}
// Return the response text.
return strResult;
}
// ピリオド区切りバージョン番号の比較
// https://ptsv.jp/2015/09/01/ピリオド区切りバージョン番号の比較/
function version(a, op, b) {
a = a.split('.');
b = b.split('.');
var ia = 0;
var ib = 0;
var limit = Math.max(a.length, b.length);
while (limit--) {
ia = parseInt(a.shift() || 0, 10);
ib = parseInt(b.shift() || 0, 10);
if (ia != ib) {
break;
}
}
return eval([ia || 0, op, ib || 0].join(' '));
}
// アップデートのチェック
function checkUpdate() {
var rss_uri = "https://www.haijin-boys.com/";
var res = getText(rss_uri);
// マッチングの修正
var m = res.replace(/[\n\r]/g, "").match(/<a href="(https:\/\/www\.haijin-boys\.com\/software\/mery\/mery-\d-\d-\d{1,2})" title="テキストエディター「Mery」ベータ版 v(\d\.\d\.\d{1,2}) を公開" rel="bookmark">/);
if (!m) {
window.alert("バージョンの確認ができませんでした。");
return;
}
var new_uri = m[1];
var new_version = m[2];
// 最新のバージョンか確認
if (version(editor.Version, "<", new_version)) {
var mes = "最新のバージョンが見つかりました。\nWebサイトを開きますか?\n\n現在のVer " + editor.Version + "\n最新のVer " + new_version;
if (confirm(mes)) {
var Shell = new ActiveXObject("WScript.Shell");
Shell.Run(new_uri);
}
} else {
window.alert("最新のバージョンがインストールされています。\n\n現在のVer " + editor.Version + "\n最新のVer " + new_version);
}
}
// checkUpdate関数の実行
try {
checkUpdate();
} catch (e) {
window.alert(e.message);
}
スポンサーリンク