「テキストブラウザ」の版間の差分
スペースからタブに変更 |
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 | var sel = document.selection; | ||
var s1 = sel.Text; | |||
if (s1 == "") { | if (s1 == "") { | ||
var x = | var x = sel.GetActivePointX(mePosView); | ||
var y = | var y = sel.GetActivePointY(mePosView); | ||
sel.SelectWord(); | |||
s1 = | s1 = sel.Text; | ||
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, ""); | ||
sel.SelectAll(); | |||
sel.Text = s2; | |||
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; | |||
} | } | ||
} | } | ||
スポンサーリンク