「テキストブラウザ」の版間の差分

MSY-07 (トーク | 投稿記録)
スペースからタブに変更
MSY-07 (トーク | 投稿記録)
SyntaxHighlightにcopyの追加
 
(同じ利用者による、間の5版が非表示)
1行目: 1行目:
== 注意事項 ==
下記のマクロはInternet Explorer上で動作しますが、Internet Explorerのサポートは2022年6月16日に終了したため、下記のマクロを使用することはおすすめしません。
== Kuro 版 ==
URL の上にカーソルを置いて実行するとその内容をエディタ内に表示します。
URL の上にカーソルを置いて実行するとその内容をエディタ内に表示します。


<syntaxhighlight lang="javascript">
=== ソースコード ===
<syntaxhighlight lang="javascript" copy>
#title = "テキストブラウザ"
#tooltip = "URL の上にカーソルを置いて実行するとその内容をエディタ内に表示します。"
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// テキストブラウザ
//
// Copyright (c) Kuro. All Rights Reserved.
// Copyright (c) Kuro. All Rights Reserved.
// www:    https://www.haijin-boys.com/
// www:    https://www.haijin-boys.com/
19行目: 24行目:
}
}


var s1 = document.selection.Text;
var sel = document.selection;
var s1 = sel.Text;
if (s1 == "") {
if (s1 == "") {
var x = document.selection.GetActivePointX(mePosView);
var x = sel.GetActivePointX(mePosView);
var y = document.selection.GetActivePointY(mePosView);
var y = sel.GetActivePointY(mePosView);
document.selection.SelectWord();
sel.SelectWord();
s1 = document.selection.Text;
s1 = sel.Text;
document.selection.SetActivePoint(mePosView, x, y);
sel.SetActivePoint(mePosView, x, y);
}
}
if (s1.substr(0, 7) == "http://" || s1.substr(0, 8) == "https://") {
if (s1.substr(0, 7) == "http://" || s1.substr(0, 8) == "https://") {
39行目: 45行目:
s2 = s2 + "--------------------------------------------------------------------------------" + "\n";
s2 = s2 + "--------------------------------------------------------------------------------" + "\n";
s2 = s2 + getHtml(o.document.body.childNodes, "");
s2 = s2 + getHtml(o.document.body.childNodes, "");
document.selection.SelectAll();
sel.SelectAll();
document.selection.Text = s2;
sel.Text = s2;
document.selection.StartOfDocument();
sel.StartOfDocument();
}
}
}
}
103行目: 109行目:
}
}
break;
break;
}
}
return s;
}
</syntaxhighlight>
== MSY-07 版 ==
Kuro氏が作成したマクロはWindowsの64ビット版では動作しないため、改造して64ビット版で動作するようにしました。
=== ソースコード ===
<syntaxhighlight lang="javascript" copy>
#title = "テキストブラウザ"
#tooltip = "URL の上にカーソルを置いて実行するとその内容をエディタ内に表示します。"
// 定数
var indent = "\t";
// getTypeName関数の代替実装
function getTypeName(arg1) {
try {
return Object.prototype.toString.call(arg1).match(/\[object (.+)\]/)[1];
} catch (e) {
return "Unknown";
}
}
// 選択テキスト取得
var sel = document.selection;
var s1 = sel.Text;
if (s1 == "") {
var x = sel.GetActivePointX(mePosView);
var y = sel.GetActivePointY(mePosView);
sel.SelectWord();
s1 = sel.Text;
sel.SetActivePoint(mePosView, x, y);
}
// URLが選択されている場合の処理
if (s1.substr(0, 7) == "http://" || s1.substr(0, 8) == "https://") {
try {
var xhr = new ActiveXObject("MSXML2.XMLHTTP.6.0");
xhr.open("GET", s1, false);
xhr.send();
if (xhr.status == 200) {
var html = xhr.responseText;
// タイトル取得
var title = html.match(/<title[^>]*>([^<]*)<\/title>/i);
var s2 = s1 + "\n";
s2 += (title ? title[1] : "No Title") + "\n";
s2 += "--------------------------------------------------------------------------------" + "\n";
// HTML解析と整形
var bodyContent = html.match(/<body[^>]*>([\s\S]*)<\/body>/i);
if (bodyContent) {
s2 += getHtml(parseHtml(bodyContent[1]), "");
}
// 新しいタブに結果を出力
editor.NewFile();
editor.ActiveDocument.selection.Text = s2;
editor.ActiveDocument.selection.StartOfDocument();
}
} catch (e) {
alert("エラー: " + e.message);
}
}
// HTML文字列をDOM風オブジェクトに変換
function parseHtml(html) {
var div = new ActiveXObject("htmlfile");
div.write(html);
div.close();
return div.body.children;
}
// HTML解析関数
function getHtml(arg1, arg2) {
var s = "";
for (var i = 0; i < arg1.length; i++) {
var v = arg1[i];
var tagName = (v.tagName || "").toUpperCase();
var temp = "";
switch (tagName) {
case "BR":
s += "\n" + arg2;
break;
case "P":
case "DIV":
case "TABLE":
case "TR":
case "H1":
case "H2":
case "H3":
case "H4":
case "H5":
case "H6":
case "UL":
case "OL":
case "SELECT":
case "TEXTAREA":
temp = indent;
s += "\n" + arg2 + temp;
break;
case "TD":
case "LI":
case "OPTION":
s += "\n" + arg2;
break;
default:
break;
}
s += (v.innerText || "");
s += getHtml(v.children || [], arg2 + temp);
if (temp != "") {
s += "\n" + arg2;
}
}
}
}
スポンサーリンク