SQLの窓

2019年01月07日


IE拡張 : リンク下の情報を取得してクリップボードへコピー


インストールは AppData\Roaming\laylaClass に行われます。
アンインストールは、同梱の uninstall.reg をエクスプローラからダブルクリックして下さい

上記 .reg でレジストリより削除します。
実行ファイル(anchor_url.htm)は、AppData\Roaming\laylaClass\menuex 内より削除して下さい。
※ 実行ファイル(anchor_url.htm)は、削除しなくても Windows には影響ありません)
IE拡張メニューです。 ページ上で右クリックして表示されるポップアップメニューから起動される IE 専用アプリケーションです。 ▼一例▼ Ieex_menu
画像、テキストリンク兼用です。

通常は、リンクされている部分の URL を取得します

<a href="url">タイトル</a>
<a href="url"><img src="url"></a>

※ 画像のみの場合は、画像の URL を取得
<img src="url">

SHIFT キーを押しながらだとリンクの HTML を全て取得します

<a href="url"><b>タイトル</b></a>

CTRL キーを押しながらだと現在のA要素のHTMLを全て取得します

<a href="url"><b>タイトル</b></a>

<JOB>
<COMMENT>
************************************************************
IE 拡張メニューインストーラ

■アンカー下 URL 取得

テキストリンクと画像専用です。

通常は、リンクされている部分の URL を取得し、
SHIFT キーを押しながらだとリンクの内側を取得します
CTRL キーを押しながらだと、現在の A 要素の内部の情報を全て取得します

■著作権その他

このプログラムはフリーです。どうぞ自由に御使用ください。
著作権は作者である私(lightbox)が保有しています。
また、本ソフトを運用した結果については、作者は一切責任を
負えせんのでご了承ください。
************************************************************
</COMMENT>

<SCRIPT
	language="VBScript"
	src="http://lightbox.in.coocan.jp/laylaClass.vbs">
</SCRIPT>

<SCRIPT language=VBScript>
' ***********************************************************
' 処理開始
' ***********************************************************
Call laylaFunctionTarget( "http://lightbox.in.coocan.jp/" )
Call laylaLoadFunction( "baseFunction.vbs" )

' //////////////////////////////////////////////////////////
' インストール時の表示名
strProgName	= "リンクのURL"
' インストールファイル名( 拡張子は .htm となる )
strProgFile	= "anchor_url"
' メニューとウインドウのタイトルに表示する文字列
' レジストリに登録するのでユニークである必要があります
strRegName	= strProgName
' 対象となるコンンテンツ
nTargetType 	= &H22
' &H3F : UNKNOWNを除く全て
' &H1  : DEFAULT
' &H2  : IMAGE
' &H4  : CONTROL
' &H8  : TABLE
' &H10 : TEXTSELECT
' &H20 : ANCHOR
' &H40 : UNKNOWN

' 画面ありかどうか
bIsGUI = False
' //////////////////////////////////////////////////////////



' Csript.exe で実行を強制
Crun

print strProgName & " をインストールします"
if not OkCancel( "インストールしてもよろしいですか?" ) then
	Wscript.Quit
end if

' ファイルシステムオブジェクト作成
GetFso

' 問題をできるだけ避ける為にc ドライブ固定(必要ならばここを変更)
strPath =  GetShellDir( &h1a )
strInstallPath1 = strPath & "\laylaClass"
strInstallPath2 = strInstallPath1 & "\menuex"
strInstallPath3 = strInstallPath2 & "\" & strProgFile & ".htm"
on error resume next
if not Fso.FolderExists( strInstallPath1 ) then
	Call Fso.CreateFolder( strInstallPath1 )
	if Err.Number <> 0 then
		ErrorFlg = True
	end if
end if
if not Fso.FolderExists( strInstallPath2 ) then
	Call Fso.CreateFolder( strInstallPath2 )
	if Err.Number <> 0 then
		ErrorFlg = True
	end if
end if
on error goto 0

Call PutTextFile( strInstallPath3, _
Replace(GetInline("MenuExt"),"$REGNAME", strRegName ) )

' レジストリ処理用オブジェクト作成
GetWshShell

on error resume next
WshShell.RegWrite _
	"HKCU\Software\Microsoft\Internet Explorer\MenuExt\"&strRegName&"\", _
	strInstallPath3, _
	"REG_SZ"
WshShell.RegWrite _
	"HKCU\Software\Microsoft\Internet Explorer\MenuExt\"&strRegName&"\Contexts", _
	nTargetType, _
	"REG_DWORD"

if bIsGUI then
	' この定義があると、画面あり
	WshShell.RegWrite _
		"HKCU\Software\Microsoft\Internet Explorer\MenuExt\"&strRegName&"\Flags", _
		&H1, _
		"REG_DWORD"
end if
on error goto 0

print "処理が終了しました"
print ""

Wscript.Quit

</SCRIPT>

<COMMENT>
******** ●ここを変更● ********
</COMMENT>
<RESOURCE id="MenuExt">
<![CDATA[
<meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS">
<SCRIPT language="VBScript">

	Dim WshShell,RegName,strLocation,obj,doc

	Set WshShell = CreateObject("WScript.Shell")
	RegName = "$REGNAME"

	' *************************************************
	' ウインドウサイズ
	' *************************************************
'	window.dialogWidth = "900px"
'	window.dialogHeight = "610px"

'	window.dialogTop = "100px"
'	window.dialogLeft = (window.screen.width/2)&"px"

	on error resume next
	ExecuteGlobal "function dummy(): end function"
	on error goto 0

	' SHIFTとCTRL用変数
	Dim keyflg1,keyflg2
	keyflg1 = False
	keyflg2 = False

Function setObj( src )
	Set obj = src
End Function
</SCRIPT>

<SCRIPT language="JavaScript">
setObj(external.menuArguments.event.srcElement);
</SCRIPT>
<html>
<head>
<title>$REGNAME</title>
<meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS">
<base target="_self">
</head>
<BODY>
<!--SHIFTとCTRLがおされているかどうかを取得するボタン-->
<INPUT id="btn" type=button onClick='keyflg1=window.event.shiftKey:keyflg2=window.event.ctrlKey'>
</BODY>
</html>
<SCRIPT language="VBScript">

	' ボタンの呼び出し
	document.getElementById("btn").click()

	on error resume next
	' *************************************************
	' 画像とアンカーの処理( レジストリ 0x22 )
	' obj は、カーソル下のオブジェクト
	' *************************************************
	Dim fobj
	Set fobj = obj
	tag = obj.tagName
	if Err.Number <> 0 then
		str = "カーソル下のオブジェクトを取得できませんでした"
	else

		tag = Ucase( tag )
		' *************************************************
		' リンクの場合
		' *************************************************
		if tag = "A" then

			if keyflg1 then
				stra = obj.innerHTML
			else
				if keyflg2 then
					stra = obj.outerHTML
				else 
					stra = obj.href
				end if
			end if 

			Call window.clipboardData.setData("Text", stra )
			str = stra

		end if

		' *************************************************
		' 画像の場合
		' *************************************************
		if tag = "IMG" then

			Dim nCnt
			nCnt = 0
			Do While True
				stra = Ucase(obj.parentElement.tagName)
				if stra = "BODY" then
					stra = fobj.src
					Exit Do
				end if
				if stra = "A" then
					if keyflg1 then
						stra = obj.parentElement.innerHTML
					else
						if keyflg2 then
							stra = obj.parentElement.outerHTML
						else 
							stra = obj.parentElement.href
						end if
					end if 
					Exit Do
				end if
				Set obj = obj.parentElement
				nCnt = nCnt + 1
				if nCnt > 100 then
					alert("階層が深すぎます   ")
					Exit Do
				end if
			Loop

			Call window.clipboardData.setData("Text", stra )
			str = stra

		end if

	end if
	on error goto 0

	alert(str)


</SCRIPT>
]]>
</RESOURCE>

</JOB>





posted by lightbox at 2019-01-07 14:54 | IE拡張メニュー | このブログの読者になる | 更新情報をチェックする

2019年01月05日


Seesaa ブログの『カテゴリ』をソートするブックマークレット

▼ ブックマークバーにドラッグ&ドロップして登録して下さい
Seesaaカテゴリソート

iframe をページ内に作成して、その中で JavaScript を読み込んで、parent を操作するという方法です。



以下が読み込まれた JavaScript です( https://winofsql.jp/seesaa_cat_sort.js )。
var doc = parent.document;
var colTable = doc.getElementsByTagName("TABLE");
var len = colTable.length;
var objTable,colInput,colINum
for( var i = 0; i < len; i++ ) {

	objTable = colTable[i];

	if ( objTable.className == "list-table" ) {
		colInput = objTable.getElementsByTagName("A");
		colINum = objTable.getElementsByTagName("INPUT");
	}

}

len = colInput.length;
len = len / 2;
var cname1 = Array();
var cname2 = Array();
for( var i = 0; i < len; i++ ) {
	cname1.push((colInput[i*2].firstChild.nodeValue).toUpperCase());
	cname2.push((colInput[i*2].firstChild.nodeValue).toUpperCase());
}

cname2.sort();

len = cname2.length;
var base_i;
for( var i = 0; i < len; i++ ) {
	base_i = cname1.indexOf(cname2[i]);
	colINum[base_i].value = (i*10)+100;
}

一度登録したら二度目は登録済のものを使うようにコードを書いているので、解っていれば無駄なコードが殆どです。必要なのは、iframe を作成してその中にコードを document.write しているところです。
<a href='javascript:if(window[window.location.hostname+".loadSeesaaCatSort"]!==true){window[window.location.hostname+".loadSeesaaCatSort"]=true;(function(){var%20wnd=document.createElement("iframe");with%20(wnd){with%20(style){display="none";}}document.body.appendChild(wnd);wnd.contentWindow.document.write("<"+"script src=\"https://winofsql.jp/seesaa_cat_sort.js\"></"+"script>");wnd.contentWindow.document.close();})();}void(0);'>Seesaaカテゴリソート</a>
▼ 整形した元の状態
if ( window[window.location.hostname+".loadSeesaaCatSort"] !== true ) {
	window[window.location.hostname+".loadSeesaaCatSort"] = true;
	(function() {
		var wnd = document.createElement("iframe");
		with (wnd){
			with (style){
				display = "none";
			}
		}
		document.body.appendChild(wnd);
		wnd.contentWindow.document.write("<"+"script src=\"http://winofsql.jp/seesaa_cat_sort.js\"></"+"script>");
		wnd.contentWindow.document.close();
	})();
}

関連する記事

Seesaa(またはさくらのブログ) の『コメント・公開設定・広告の表示・カテゴリ』を一括変更するブックマークレット




posted by lightbox at 2019-01-05 17:08 | ブックマークレット | このブログの読者になる | 更新情報をチェックする

Google Chrome でイラストAC のタグをコピー可能にするブックマークレット

イラストAC の詳細ページにはタグの一覧がありますが、ここは css の user-select が none になっているので選択できません。この user-select を all にすると、右クリックだけで全て選択されてコピーのメニューが使用可能です。

ブックマークレットが無くても、F12 のデペロッパーツールで該当部分の css を 変更すれば同じ事です。




javascript:document.getElementsByClassName('image-tags')[0].style.userSelect='all';void(0)




posted by lightbox at 2019-01-05 15:36 | ブックマークレット | このブログの読者になる | 更新情報をチェックする

選択した文字列を Google 翻訳で翻訳するブックマークレット( 選択が無い場合はページごと翻訳 ) / 3年半でだいぶ結果が変わってます

選択した文字列を新しいウインドウに Google 翻訳を開いて翻訳完了状態にします。選択が無い場合は、同じく Google 翻訳でページ全体を翻訳します。


▼ 冒頭の文章を選択して訳してみました( 2015-06-19 )
Open the Google translated the selected string to a new window and the translation is complete state. If the selection is not, it will translate the entire page in the same Google translation.
▼ 冒頭の文章を3年半ぶりに選択して訳してみました( 2019-01-05 )
Open the Google Translate into the new window and place the selected character string in the translation completion state. If there is no choice, we also translate the whole page with Google Translate.
ブックマークレットに関する記事




posted by lightbox at 2019-01-05 14:59 | ブックマークレット | このブログの読者になる | 更新情報をチェックする

2019年01月04日


一般的なページで IFRAME を埋め込んで Yahoo! の テレビ番組を今の時間帯より24時間表示するボタンを表示するブックマークレット

セキュリティの特殊な設定をしているページでは表示されないので、タブを一つ開けてそこで実行して下さい



地域を選択してボタンをクリックすると、現在の時刻より少し戻って 24 時間ぶんの番組を表示します。



※ 現在時刻では、番組が始まってしまっているので、少し戻る必要があります。

一度選択した地域は localStorage に保存されるので、以降はデフォルトで選択されます


▼ ブックマーク登録用リンク
Yahoo!24H番組
Microsoft Edge の場合は、適当な URL をアドレスバーに表示して、その右端にある ★ ボタンでブックマークを作成してから、右クリックからタイトルと URL を変更します。URL に以下のコードをセットすると使用できます。
javascript:javascript:var url='https://lightbox.sakura.ne.jp/yb.js';var wnd=document.createElement('iframe');wnd.setAttribute('id','if');wnd.frameBorder=0;document.body.appendChild(wnd);wnd.contentWindow.document.write('<'+'script src=\''+url+'\' charset=\'utf-8\'><'+'/script>');void(0);

実際のブックマークの中に全てのコードを書くのはメンテナンス性が悪く、現在のページの環境から隔離した状態でアプリケーションを実行しています。その為に最初の段階で IFRAME を作成してその中に https で始まる URL に置かれた js ファイルを document.write して IFRAME の中に実行環境を作成します。( js で画面作成しています )

さらに、js ファイル内では jQuery を実装するので自由にコードを追加する事ができ、親となる元のページへのアクセスには jQuery が使用できます。

この時の一番の問題が画面作成ですが、これは本来の HTML・JavaScript・CSS を文字列化して document.write で作成します。こうする事によって直感的に新しい画面のメンテナンスが可能です( まだ試していませんが、ajax で読み込んで、innerHTML にセットしてもいいかもしれません。

▼ 文字列画面作成ツール
http://toolbox.winofsql.jp/jsstring.php

データ保存に localStorage

直接だと表示しているページのドメインでのみ有効な保存となりますが、それでは役に立たないので js ファイルのあるドメインにコード(.html)を用意して、js ファイルが作成する画面内に IFRAME をさらに作成して js ファイルのあるドメインにあるページ( lightbox.sakura.ne.jp/yb.html )を表示します。

そして、ブックマークレットを表示したページと、 js ファイルのあるドメインにあるページ間で postMessage で通信して  js ファイルのあるドメインに データを保存します。

こうする事によって、一度保存されたデータは、どのページからも取得できる事になります。

js ファイル
parent.document.getElementById("if").style.position='absolute';
parent.document.getElementById("if").style.width='250px';
parent.document.getElementById("if").style.height='70px';
parent.document.getElementById("if").style.left='0px';
parent.document.getElementById("if").style.top='0px';
parent.document.getElementById("if").style.zIndex=0x7FFFFFFF;
parent.document.getElementById("if").style.borderColor='#000000';
parent.document.getElementById("if").style.borderWidth='1px';
parent.document.getElementById("if").style.borderStyle='solid';
parent.document.getElementById("if").style.backgroundColor='#FFFFFF';

str="";
str+="<"+"script src=\"//ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js\"></"+"script> ";
str+="<"+"script> \n";
str+="$(function(){ \n";
str+="	loadAction(); \n";
str+="}); \n";

str+="</"+"script> ";
str+="<style> \n";
str+="* { \n";
str+="	font-family: \"ヒラギノ角ゴPro W3\",\"Hiragino Kaku Gothic Pro\",\"メイリオ\",Meiryo,\"MS Pゴシック\",Verdana,Arial,Helvetica,sans-serif; \n";
str+="} \n";
str+="</style> ";

str+="<div> \n";
str+="<select id=\"yahoo_area\"> \n";
str+="<option value=\"10\">北海道(札幌)</option><option value=\"11\">北海道(函館)</option><option value=\"12\">北海道(旭川)</option><option value=\"13\">北海道(帯広)</option><option value=\"14\">北海道(釧路)</option><option value=\"15\">北海道(北見)</option><option value=\"16\">北海道(室蘭)</option><option value=\"22\">青森</option><option value=\"20\">岩手</option><option value=\"18\">秋田</option><option value=\"19\">山形</option><option value=\"17\">宮城</option><option value=\"21\">福島</option><option value=\"28\">栃木</option><option value=\"25\">群馬</option><option value=\"26\">茨城</option><option value=\"23\">東京</option><option value=\"24\">神奈川</option><option value=\"29\">埼玉</option><option value=\"27\">千葉</option><option value=\"32\">山梨</option><option value=\"31\">新潟</option><option value=\"30\">長野</option><option value=\"34\">石川</option><option value=\"37\">富山</option><option value=\"36\">福井</option><option value=\"35\">静岡</option><option value=\"33\">愛知</option><option value=\"39\">岐阜</option><option value=\"38\">三重</option><option value=\"43\">和歌山</option><option value=\"44\">奈良</option><option value=\"45\">滋賀</option><option value=\"41\">京都</option><option value=\"40\">大阪</option><option value=\"42\">兵庫</option><option value=\"53\">徳島</option><option value=\"51\">愛媛</option><option value=\"54\">高知</option><option value=\"52\">香川</option><option value=\"47\">岡山</option><option value=\"46\">広島</option><option value=\"49\">鳥取</option><option value=\"48\">島根</option><option value=\"50\">山口</option><option value=\"55\">福岡</option><option value=\"61\">佐賀</option><option value=\"56\">熊本</option><option value=\"57\">長崎</option><option value=\"60\">大分</option><option value=\"59\">宮崎</option><option value=\"58\">鹿児島</option><option value=\"62\">沖縄</option></select> \n";
str+="<br> \n";
str+="<"+"script type=\"text/javascript\"> \n";
str+="(function() { \n";
str+="	var wk = localStorage['yahoo_area'] || ''; \n";
str+="	if ( wk != '' ) { \n";
str+="		document.getElementById('yahoo_area').value = wk; \n";
str+="	} \n";
str+="})(); \n";
str+="</"+"script> \n";
str+="<input type=\"button\" value=\"Yahoo! 24H番組\" id='action' onclick=\" \n";
str+="(function(){ \n";
str+="	localStorage['yahoo_area'] = document.getElementById('yahoo_area').value; \n";
str+="	var url = 'http://tv.yahoo.co.jp/listings/?&type=normal&a='+document.getElementById('yahoo_area').value+'&t=TV&s=1&vb=1&vc=0&vd=0&ve=1&va=24'; \n";
str+="	var d = new Date(); \n";
str+="	var yyyy = d.getFullYear(); \n";
str+="	var mm = (d.getMonth()+1); \n";
str+="	var len1 = ('00'+mm).length; \n";
str+="	mm = ('00'+mm).substr(len1-2,2); \n";
str+="	var dd = d.getDate(); \n";
str+="	var len2 = ('00'+dd).length; \n";
str+="	dd = ('00'+dd).substr(len2-2,2); \n";
str+="	var hh = d.getHours() - 2; \n";
str+="	if ( hh <= 1 ) { \n";
str+="		hh = hh + 24; \n";
str+="		dd = d.getDate()-1; \n";
str+="		len2 = ('00'+dd).length; \n";
str+="		dd = ('00'+dd).substr(len2-2,2); \n";
str+="	} \n";
str+="	url += '&d=' + yyyy+mm+dd; \n";
str+="	url += '&st=' + hh; \n";
str+="	window.open(url); \n";
str+="})(); \n";
str+="	\"> \n";

str+="<input type='button' value='閉じる' id='remove' style='margin-left:15px;'>  ";

str+="</div> \n";
str+="<iframe src=\"https://lightbox.sakura.ne.jp/yb.html\" style='display:none' id='save_area'></iframe> ";

str+=" ";
document.write(str);
document.close();

parent.scroll(0,0);

function loadAction() {

	console.log("ブックマークレット:IFRAMEユニット");
	// 初期処理

	$("#remove").on("click", function(){
		$(parent.document.getElementById("if")).remove();
	} );

	$("#action").on("click", function(){

		var message = {};
		message.command = 'set';
		message.text = $("#yahoo_area").val();
		var request = JSON.stringify(message);
		$("#save_area").get(0).contentWindow.postMessage(request, "*");

	} );

	$("#save_area").on("load",function(){
		var wk = localStorage['yahoo_area'] || '';
		if ( wk == '' ) {
			var message = {};
			message.command = 'get';
			message.text = '';
			var request = JSON.stringify(message);
			$("#save_area").get(0).contentWindow.postMessage(request, "*");
		}
	});


	$(window).on("message",function(e){

		var message = JSON.parse(e.originalEvent.data);
		if ( message.command == 'get_result' ) {
			$("#yahoo_area").val(message.text);
		}

	});


}


postMessage で通信するページ
( lightbox.sakura.ne.jp/yb.html )
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script>

$(function(){
	$(window).on("message",function(e){

		var message = JSON.parse(e.originalEvent.data);
		if ( message.command == 'set' ) {
			localStorage["ybken"] = message.text;
		}
		if ( message.command == 'get' ) {
			message = {};
			message.command = 'get_result';
			message.text = localStorage["ybken"] || '';
			if ( message.text != '' ) {
				var result = JSON.stringify(message);
				parent.postMessage(result, "*");
			}
		}

	});
});

</script>





posted by lightbox at 2019-01-04 11:04 | ブックマークレットコード | このブログの読者になる | 更新情報をチェックする

選択文字列を Twitter の投稿画面に遷移させるブックマークレットの内容の解説

▼ 以下のページは、ブックマークレットの使い方を説明しています。
選択文字列を Twitter の投稿画面に遷移させるブックマークレット

ここでは、その中で使用されているコードの説明をしています。

Web Intent URL で使用されているパラメータの開設はこちら( Twitter ドキュメント )
▼ URL ありバージョン : URL なしバージョンはこちら
ブックマークレット => 選択文字でTwitter投稿


このブックマークレットは、殆ど var の変数定義によってなりたっていて、通常の JavaScript に整形すると以下のような単純なものとなります。
javascript: var d = document,
w = window,
enc = encodeURIComponent,
e = w.getSelection,
k = d.getSelection,
x = d.selection,
s = (e ? e() : (k) ? k() : (x ? x.createRange().text: 0)),
s2 = ((s.toString() == '') ? s: (enc(s))),
f = 'https://twitter.com/intent/tweet',
l = d.location,
p = '?text=' + s2 + '&url=' + enc(l),
u = f + p;
try {
    if (!/^(.*.)?tumblrzzz[^.]*$/.test(l.host)) throw (0);
    tstbklt();
} catch(z) {
    a = function() {
        if (!w.open(u)) l.href = u;
    };
    if (/Firefox/.test(navigator.userAgent)) setTimeout(a, 0);
    else a();
}
void(0)
この内容からも解りますが、元々は tumblr関連(?) の為に作られたものを転用しています。実際はこの部分を削除してもっと短くなるのですが、元々の発祥を残すためにそのまま使っています。( ライセンス等の詳細は不明です )

変更する部分は、9行目と11行目で、9行目は遷移するページで、11行目はそのページへの QueryString となります。

選択した内容は、クロスブラウジングされていて、この方法ですと、IE11 でも問題無く動作します。選択した文字列は、通常 encodeURIComponent によって UTF-8 でエンコーディングして使用します。この場合ですと、そのページの URL もエンコーディングしています。

最後に、windows.open で開くようになっていますが、Firefox の場合はタイマーで遅延で使用し、それ以外はすぐ実行しています。

13行目と14行目は必要無い部分ですが、13行目でエラーとなり(throw される)、window.open が起動されるようになっているので、tumblrzzz という部分を変更して特定のドメインにすると、表示されているページと一致した場合に、『tstbklt』という function が本当に存在するとその function が呼ばれるようになっています。( 特定のページで任意の function をコールする事が可能になります )


posted by lightbox at 2019-01-04 10:18 | ブックマークレットコード | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり