<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="Hidemaru for Windows" />
<title>ExpContext</title>
<!-- スクリプト -->
<script type="text/jscript">
var ext;
if (window.opener)
ext = window.opener.external.menuArguments;
else {
window.alert("このファイルはIEのコンテキストメニュー拡張用のプログラムファイルです。\n直接開くことはできません。");
document.write("<style type='text/css'>*{display:none;}<\/style>");
window.opener = true;
setTimeout("window.close()", 500);
}
function Coerce() { //coerce
if (!catchComplete())
return;
var s = "";
var html, i;
s +=
"<link rel='stylesheet' type='text/css' href='coerce.css'>\n"+
"<base href='" + ext.location.href + "'>\n"+
"<body>\n";
//フレーム有オプション
var frm = ext.top.frames;
var frmDoc = ext.top.document;
if (frm.length) {
//対象ページがShiftJISでなかった時の文字化け対策
var msg = {
"このページにはフレームが使われています。":
"%u3053%u306E%u30DA%u30FC%u30B8%u306B%u306F%u30D5%u30EC%u30FC%u30E0%u304C%u4F7F%u308F%u308C%u3066%u3044%u307E%u3059%u3002",
"(<iframe>が含まれています)":
"%uFF08%26lt%3Biframe%26gt%3B%u304C%u542B%u307E%u308C%u3066%u3044%u307E%u3059%uFF09",
"(フレーム名:":
"%28%u30D5%u30EC%u30FC%u30E0%u540D%uFF1A",
"なし":
"%u306A%u3057",
"<noframes>の内容":
"%26lt%3Bnoframes%26gt%3B%u306E%u5185%u5BB9"
}
for (i in msg)
msg[i] = unescape(msg[i]);
s += "<div>";
s += "<strong style='color:red'>" + msg["このページにはフレームが使われています。"];
if (frmDoc.getElementsByTagName("iframe").length)
s += msg["(<iframe>が含まれています)"];
s += "<\/strong><br>\n";
for (i = 0; i < frm.length; i++)
s += "<a href='" + frm[i].location.href + "'>" + frm[i].location.href + msg["(フレーム名:"] + (frm[i].name ? frm[i].name : msg["なし"]) + ")<\/a><br>\n";
html = frmDoc.body.innerHTML;
if (frmDoc.getElementsByTagName("noframes").length) {
s += "<p><strong style='color:red'>" + msg["<noframes>の内容"] + "<\/strong><\/p>\n";
s += html.replace(/<noframes/gi, "<Xnoframes");
}
s += "<hr style='margin-bottom:5em;'>\n";
s += "<\/div>\n";
}
//ソース置換
var regObj, rep = new Array(
" style=",
" bgcolor=",
" background=",
" onmouseout=",
" onmouseover=",
" onmousedown=",
" onmouseup=",
" onclick=",
" onkeypress=",
" onchange=",
" onselect=",
" onload=",
" onunload=",
" onabort=",
" onerror=",
" onfocus=",
" onblur=",
" onsubmit=",
" onreset=",
"<font",
"<nobr"
);
html = ext.document.body.innerHTML;
for (i = 0; i < rep.length; i++) {
regObj = new RegExp(rep[i], "gi");
html = html.replace(regObj, rep[i].charAt(0) + "X" + rep[i].substring(1, rep[i].length));
}
html = html.replace(/<script/gi, "<\!--<Xscript");
html = html.replace(/\/\/.?--\>/gi, "//");
html = html.replace(/<\/script>/gi, "<\/script>-->");
html = html.replace(/<noscript/gi, "<span class='noscriptDecoration'><Xnoscript");
html = html.replace(/<\/noscript>/gi, "<\/noscript><\/span>");
s += html;
s += "<\/body>";
try { //IEが調子悪い時に起きる例外エラーへの対処
var win = ext.open();
with (win.document) {
open(); write(s); close(); title = ext.top.document.title;
}
win.focus();
closeSelect();
} catch(e) {
errorMsg(e);
}
}
var someWinObj;
function SomeWin() { //ウィンドウ複製
//未使用
if (someWinObj) {
//フレーム有オプション
if (ext.top.frames.length) {
var frm = someWinObj.top.document.getElementsByTagName("frame");
for (i = 0; i < frm.length; i++) {
frm[i].src = ext.top.frames[i].location.href;
}
}
someWinObj.focus();
window.close();
} else if (catchComplete()) {
try {
someWinObj = window.open(ext.top.location.href);
closeSelect();
//setTimeout("SomeWin()", 500); //windowオブジェクトが生成されるまでの時間稼ぎ
} catch(e) {
errMsg(e);
}
}
}
function change(selThis) { //サーバーチェンジ
var svr = selThis.value;
selThis.selectedIndex = 0;
var l = ext.top.location, lh = l.host, p = l.href;
if (p.match(/file:\/\/(|localhost)\//))
p = unescape(p.replace(/file:\/\/(|localhost)\//, ""));
if ((l.protocol == "file:" && p.substr(0,2) == svr) || lh == svr)
return;
else if (l.protocol == "file:")
p = p.replace(p.substr(0,2), "http://" + svr);
else
p = p.replace("http://" + lh, svr);
if (!p.match(/\.([sx]?html?|cgi)/)) {
var a = new String(p.match(/[?#].+/)); //アンカー等を一時退避
p = new String(p.match(/^[^?#]+/));
try {
p += ext.document.getElementsByName("filename")[0].content;
} catch (e) {
p += "index.html";
}
if (a)
p += a;
}
l.href = p;
closeSelect();
}
function Explorer() { //エクスプローラの起動
var appObj = new ActiveXObject("Shell.Application");
appObj.ShellExecute("explorer","F:\\");
closeSelect();
}
function folderOpen() { //このページのフォルダを開く
var path = ext.location.href;
if (ext.location.host.match(/(127\.0\.0\.1|cts\.velvet\.jp)/))
path = path.replace(/http:\/\/(127\.0\.0\.1|cts\.velvet\.jp)/, "F:");
else if (ext.location.protocol == "file:")
path = path.replace("file:///", "");
else
return;
path = path.replace(/\//g, "\\").replace(/[?#].+/, "");
path = path.substring(0, path.lastIndexOf("\\"));
(new ActiveXObject("Shell.Application")).ShellExecute("explorer", path);
closeSelect();
}
function catchComplete() { //オブジェクトの受け渡し
return ext;
}
function closeSelect() { //ウィンドウを閉じる
if (document.all("close").checked)
window.close();
}
function errorMsg(e) { //エラーメッセージ
alert("予期せぬ、あるいは不可抗力のエラーが発生しました。\n安全のためスクリプトの実行を中断します。\n\nError Name: " + e.name + "\nError Message: " + e.message + "\nError Number: " + e.number);
window.close();
}
</script>
<!-- CSS -->
<style type="text/css">
BODY {
margin:0px;
background-color:#cec6b5;
overflow:hidden;
}
P { margin:0.5em 0px;}
FIELDSET {
margin:1em 0.5em;
padding:1em;
border-color:#ccb;
text-align:center;
}
LEGEND {
padding:3px 0.5em;
border:1px solid #543;
background-color:543; color:#cec6b5;
font-size:24pt; font-family:"Century-Gothic", Verdana, Arial;
}
LABEL {
font-size:9pt;
cursor:hand;
}
INPUT.btn {
width:100%;
border-color:#ccb #543 #543 #ccb;
background-color:#ccb; color:#513c27;
font-size:10pt; font-family:sans-serif;
cursor:hand;
}
SELECT {
width:100%;
background-color:#ccb; color:#513c27;
font-size:10pt; font-family:sans-serif;
}
</style>
</head>
<body>
<!-- ボタン -->
<div>
<fieldset>
<legend>ExpContext</legend>
<p><label for="close"><input id="close" type="checkbox" checked="checked" />選択したら閉じる</label></p>
<p><input type="button" class="btn" onclick="Coerce()" value="Coerce" /></p>
<p><input type="button" class="btn" onclick="SomeWin()" value="ウィンドウを複製" /></p>
<p><input type="button" class="btn" onclick="Explorer()" value="エクスプローラ" /></p>
<p><input type="button" class="btn" onclick="folderOpen()" value="このページのフォルダ" /></p>
<p><select onchange="change(this)">
<option>サーバーチェンジ</option>
<option value="127.0.0.1">to http://127.0.0.1/</option>
<option value="cts.velvet.jp">to http://cts.velvet.jp/</option>
<option value="F:">to local</option>
</select></p>
</fieldset>
</div>
</body>
</html>