<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
  <channel>
    <title>WEB 職人</title>
    <link>https://webcraft.seesaa.net/</link>
    <description>WEBサイト構築に必要な職人芸の紹介をしています。</description>
    <language>ja</language>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <itunes:subtitle></itunes:subtitle>
    <itunes:summary>WEBサイト構築に必要な職人芸の紹介をしています。 </itunes:summary>
    <itunes:keywords>WEB,PHP,javascript,テクニカル,技術</itunes:keywords>
    
    <itunes:author>lightbox</itunes:author>
    <itunes:owner>    
       <itunes:name></itunes:name>
       <itunes:email></itunes:email>
    </itunes:owner>
        <itunes:explicit>no</itunes:explicit>
        <item>
      <link>https://webcraft.seesaa.net/article/463468461.html</link>
      <title>Seesaa のスマホページで表示される広告が左に寄りすぎでみっともないので CSS( 属性セレクター ) で調整する</title>
      <pubDate>Tue, 01 Jan 2019 21:11:57 +0900</pubDate>
            <description>この左に寄っている部分です。id の 先頭が gn_delivery となってるので、これが変わらない限りは有効ですね。属性セレクター( mozilla )   div[id^=&quot;gn_delivery&quot;] {	text-align:center;}</description>
            <itunes:summary><![CDATA[

この左に寄っている部分です。

<img src="https://lh3.googleusercontent.com/-qUNv0b5pL-g/XCtbCeyR_LI/AAAAAAAAt2I/8_L5JI8c9DwKsVGUeZlidbhiOVOrwreJgCHMYBhgL/s438/_img.png">

id の 先頭が gn_delivery となってるので、これが変わらない限りは有効ですね。

<a href="https://developer.mozilla.org/ja/docs/Web/CSS/Attribute_selectors" target="_blank">属性セレクター( mozilla )</a>


 
 
 

div[id^="gn_delivery"] {
	text-align:center;
}










<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>
この左に寄っている部分です。

<img src="https://lh3.googleusercontent.com/-qUNv0b5pL-g/XCtbCeyR_LI/AAAAAAAAt2I/8_L5JI8c9DwKsVGUeZlidbhiOVOrwreJgCHMYBhgL/s438/_img.png" style='border:1px solid #c0c0c0;border-radius:0px'>

id の 先頭が gn_delivery となってるので、これが変わらない限りは有効ですね。

<a href="https://developer.mozilla.org/ja/docs/Web/CSS/Attribute_selectors" target="_blank">属性セレクター( mozilla )</a>
</pre>
<div id="sh_5c2b582d7fda6" class="scroll">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5c2b582d7fda6 .syntaxhighlighter div,#sh_5c2b582d7fda6 .syntaxhighlighter span,#sh_5c2b582d7fda6 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div class="srcunit"> 
<pre data-name="code190101210813" class="brush:css">
div[id^="gn_delivery"] {
	text-align:center;
}
</pre>
</div>
</div>
<script type="text/javascript">
SyntaxHighlighter.defaults['tab-size'] = 8;
dp.SyntaxHighlighter.HighlightAll("code190101210813"); 
</script>
<pre>




</pre>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>Seesaa</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/463468461</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/122661267.html</link>
      <title>MSXML2.XMLHTTPでファイルをPOSTする</title>
      <pubDate>Mon, 19 Feb 2018 17:57:32 +0900</pubDate>
            <description>MSXML2.XMLHTTPでファイルをアップロードする と対になる処理です。受けるほうは通常と同じで簡単ですが、送るほうは注意すべき点がいくつかありますまず、送るほうでは日本語を URL エンコードする必要があるので、JavaScript を呼び出して encodeURIComponent を使用しています。( その為、PHP ではデコードされると UTF-8 になるので注意 )後、http で POST する際の仕様として、http ヘッダに Content-Type と..</description>
            <itunes:summary><![CDATA[

<a href="http://webcraft.seesaa.net/article/122130466.html" target="_blank">MSXML2.XMLHTTPでファイルをアップロードする</a> と対になる処理です。受けるほうは通常と同じで簡単ですが、送るほうは注意すべき点がいくつかあります

まず、送るほうでは日本語を URL エンコードする必要があるので、JavaScript を呼び出して encodeURIComponent を使用しています。( その為、PHP ではデコードされると UTF-8 になるので注意 )

後、http で POST する際の仕様として、http ヘッダに Content-Type として application/x-www-form-urlencoded をセットしています( データサイズは実際ブラウザが行っているのでセットしています。)

<b>VBSCript 側</b>


 
 
 

&lt;JOB&gt;
&lt;SCRIPT language="JScript"&gt;
function js(str) {

	return encodeURIComponent( str );

}
&lt;/SCRIPT&gt;

&lt;SCRIPT language="VBScript"&gt;

' XMLHTTP を作成
Set objHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")
lResolve = 60 * 1000
lConnect = 60 * 1000
lSend = 60 * 1000
lReceive = 60 * 1000

Call objHTTP.Open("POST","https://yourdomain/test/post.php",False)
Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
strData = "data=" &amp; js("日本語をURLエンコードする")
Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send(strData)
Wscript.Echo objHTTP.responseText

&lt;/SCRIPT&gt;

&lt;/JOB&gt;








<b>PHP 側</b>



 
 
 

&lt;?php
header( "Content-Type: text/html; charset=utf-8" );
header( "Expires: Thu, 19 Nov 1981 08:52:00 GMT" );
header( "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" );
header( "Pragma: no-cache" );

mb_language( "ja" );
mb_internal_encoding("utf-8");

foreach( $_POST as $key =&gt; $value ) {
	// $_GET の中には変換前が残る
	$_GET[$key] = $value;
	// $_POST を HTML 埋め込み用変数として使用する
	$_POST[$key] = htmlentities( $value );
}

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

	// ファイルへ入力されたデータを書き込み
	file_put_contents( "text.dat", mb_convert_encoding( $_GET['data'], "shift_jis", "utf-8" ) );

	print "POST処理を受付けました";

}

?&gt;
&lt;form method="post"&gt;
&lt;input type="text" name="data" value="&lt;?= $_POST["data"] ?&gt;"&gt;
&lt;input type="submit" name="send" value="送信"&gt;
&lt;/form&gt;












<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>
<a href="http://webcraft.seesaa.net/article/122130466.html" target="_blank">MSXML2.XMLHTTPでファイルをアップロードする</a> と対になる処理です。受けるほうは通常と同じで簡単ですが、送るほうは注意すべき点がいくつかあります

まず、送るほうでは日本語を URL エンコードする必要があるので、JavaScript を呼び出して encodeURIComponent を使用しています。( その為、PHP ではデコードされると UTF-8 になるので注意 )

後、http で POST する際の仕様として、http ヘッダに Content-Type として application/x-www-form-urlencoded をセットしています( データサイズは実際ブラウザが行っているのでセットしています。)

<b class=gttl>VBSCript 側</b>
</pre>
<div id="sh_5a8a90cb98de1" class="scroll">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a8a90cb98de1 .syntaxhighlighter div,#sh_5a8a90cb98de1 .syntaxhighlighter span,#sh_5a8a90cb98de1 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div class="srcunit"> 
<pre data-name="code180219175435" class="brush:wsf">
&lt;JOB&gt;
&lt;SCRIPT language="JScript"&gt;
function js(str) {

	return encodeURIComponent( str );

}
&lt;/SCRIPT&gt;

&lt;SCRIPT language="VBScript"&gt;

' XMLHTTP を作成
Set objHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")
lResolve = 60 * 1000
lConnect = 60 * 1000
lSend = 60 * 1000
lReceive = 60 * 1000

Call objHTTP.Open("POST","https://yourdomain/test/post.php",False)
Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
strData = "data=" &amp; js("日本語をURLエンコードする")
Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send(strData)
Wscript.Echo objHTTP.responseText

&lt;/SCRIPT&gt;

&lt;/JOB&gt;

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180219175435"); 
</script>

<pre>

<b class=gttl>PHP 側</b>
</pre>

<div id="sh_5a8a903508b6e" class="scroll">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a8a903508b6e .syntaxhighlighter div,#sh_5a8a903508b6e .syntaxhighlighter span,#sh_5a8a903508b6e .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div class="srcunit"> 
<pre data-name="code180219175205" class="brush:php;name:post">
&lt;?php
header( "Content-Type: text/html; charset=utf-8" );
header( "Expires: Thu, 19 Nov 1981 08:52:00 GMT" );
header( "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" );
header( "Pragma: no-cache" );

mb_language( "ja" );
mb_internal_encoding("utf-8");

foreach( $_POST as $key =&gt; $value ) {
	// $_GET の中には変換前が残る
	$_GET[$key] = $value;
	// $_POST を HTML 埋め込み用変数として使用する
	$_POST[$key] = htmlentities( $value );
}

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

	// ファイルへ入力されたデータを書き込み
	file_put_contents( "text.dat", mb_convert_encoding( $_GET['data'], "shift_jis", "utf-8" ) );

	print "POST処理を受付けました";

}

?&gt;
&lt;form method="post"&gt;
&lt;input type="text" name="data" value="&lt;?= $_POST["data"] ?&gt;"&gt;
&lt;input type="submit" name="send" value="送信"&gt;
&lt;/form&gt;

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180219175205"); 
</script>


<pre>
<!--
■ 関連する記事
<a href="http://logicalerror.seesaa.net/article/122078730.html" target="_blank">WSH : VBScript から JavaScript の呼び出し</a>
<a href="http://webcraft.seesaa.net/article/122130466.html" target="_blank">MSXML2.XMLHTTPでファイルをアップロードする</a>
<a href="http://webcraft.seesaa.net/article/122723906.html" target="_blank">prototype.js の Ajax.Request を使い、FORM を使わずにデータをPOSTする</a>

■ 関連するMicrosoftドキュメント
<a href="http://support.microsoft.com/kb/418460/ja" target="_blank">XMLHTTPを使用して2バイト文字を含むFormデータを送信する</a>
-->



</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>クライアント/サーバー</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/122661267</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/144330379.html</link>
      <title>PHP の関数での環境情報取得( phpinfo の代替え )</title>
      <pubDate>Mon, 19 Feb 2018 10:06:34 +0900</pubDate>
            <description>@niftyホームページサービス（LaCoocan）では、phpinfo 関数が使用できないので、代替えの為いろいろな関数で情報を表示しています。関数での情報取得以下で使用している主な関数です。ini_getget_loaded_extensionsget_declared_classesini_get_allphpversionphp_ini_loaded_fileget_include_pathget_magic_quotes_gpc実行結果少し見づらいですが、調査する場..</description>
            <itunes:summary><![CDATA[

<a href="http://homepage.nifty.com/index.htm" target="_blank">@niftyホームページサービス（LaCoocan）</a>では、phpinfo 関数が使用できないので、代替えの為いろいろな関数で情報を表示しています。

<b>関数での情報取得</b>

以下で使用している主な関数です。

<a href="http://php.net/manual/ja/function.ini-get.php" target="_blank">ini_get</a>
<a href="http://php.net/manual/ja/function.get-loaded-extensions.php" target="_blank">get_loaded_extensions</a>
<a href="http://php.net/manual/ja/function.get-declared-classes.php" target="_blank">get_declared_classes</a>
<a href="http://php.net/manual/ja/function.ini-get-all.php" target="_blank">ini_get_all</a>

<a href="http://php.net/manual/ja/function.phpversion.php" target="_blank">phpversion</a>
<a href="http://php.net/manual/ja/function.php-ini-loaded-file.php" target="_blank">php_ini_loaded_file</a>
<a href="http://php.net/manual/ja/function.get-include-path.php" target="_blank">get_include_path</a>
<a href="http://php.net/manual/ja/function.get-magic-quotes-gpc.php" target="_blank">get_magic_quotes_gpc</a>


<a href="http://lightbox.on.coocan.jp/info.php" target="_blank">実行結果</a>

少し見づらいですが、調査する場合や簡単な確認のとっかかりにはなると思います。



 
 
 

&lt;!DOCTYPE html&gt;
&lt;html lang="ja"&gt;
&lt;head&gt;
&lt;meta charset="utf-8"&gt;
&lt;meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport"&gt;
&lt;title&gt;phpinfo の代替え&lt;/title&gt;
&lt;style&gt;
* {
	font-size: 12px;
	font-family: "ヒラギノ角ゴPro W6","Hiragino Kaku Gothic Pro W6","メイリオ",Meiryo,"ＭＳ Ｐゴシック",Verdana,Arial,Helvetica,sans-serif;
}

pre {
	white-space: pre-wrap;
	word-wrap: break-word;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body style='width:400px;margin:auto;border:1px solid #ccc;padding:12px;'&gt;

&lt;pre&gt;
&lt;?php

	print "PHP version : " . phpversion() . "\n";

	print "php.ini : " . php_ini_loaded_file() . "\n";
	print "include_path : " . get_include_path() . "\n";
	print "get_magic_quotes : " . get_magic_quotes_gpc . "\n";

	print "variables_order : " . ini_get('variables_order') . "\n";
	print "short_open_tag : " . ini_get('short_open_tag') . "\n";
	print "display_errors : " . ini_get('display_errors') . "\n";
	print "display_startup_errors : " . ini_get('display_startup_errors') . "\n";
	print "allow_url_fopen : " . ini_get('allow_url_fopen') . "\n";
	print "allow_url_include : " . ini_get('allow_url_include') . "\n";
	print "max_execution_time : " . ini_get('max_execution_time') . "\n";
	print "post_max_size : " . ini_get('post_max_size') . "\n";
	print "track_errors : " . ini_get('track_errors') . "\n";

	print "&lt;hr&gt;";
	print "&lt;b style='font-size:24;font-weight:bold'&gt;Loaded_extensions&lt;/b&gt;\n";

	// コンパイル/ロードされている全てのモジュールの名前を配列として返す
	$target = get_loaded_extensions();
	foreach( $target as $key =&gt; $value ) {
		print "$key =&gt; $value\n";
	}

	print "&lt;hr&gt;";
	print "&lt;b style='font-size:24;font-weight:bold'&gt;get_declared_classes&lt;/b&gt;\n";

	// 定義済のクラスの名前を配列として返す
	$classes = get_declared_classes();
	foreach( $classes as $key =&gt; $value ) {
		print "$key =&gt; $value\n";
	}

	// $_SERVER
	print "&lt;hr&gt;";
	print "&lt;b style='font-size:24;font-weight:bold'&gt;\$_SERVER&lt;/b&gt;\n";

	foreach( $_SERVER as $key =&gt; $value ) {
		print "$key =&gt; $value\n";
	}

	// $_ENV
	print "&lt;hr&gt;";
	print "&lt;b style='font-size:24;font-weight:bold'&gt;\$_ENV&lt;/b&gt;\n";

	foreach( $_ENV as $key =&gt; $value ) {
		print "$key =&gt; $value\n";
	}

	// すべての設定オプションを得る
	print "&lt;hr&gt;";
	print "&lt;b style='font-size:24;font-weight:bold'&gt;ini_get_all&lt;/b&gt;\n";
	$inis = ini_get_all();
	print_r($inis);

?&gt;
&lt;/pre&gt;

&lt;/body&gt;
&lt;/html&gt;










<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>
<a href="http://homepage.nifty.com/index.htm" target="_blank">@niftyホームページサービス（LaCoocan）</a>では、phpinfo 関数が使用できないので、代替えの為いろいろな関数で情報を表示しています。

<b class=gttl>関数での情報取得</b>

以下で使用している主な関数です。

<a href="http://php.net/manual/ja/function.ini-get.php" target="_blank">ini_get</a>
<a href="http://php.net/manual/ja/function.get-loaded-extensions.php" target="_blank">get_loaded_extensions</a>
<a href="http://php.net/manual/ja/function.get-declared-classes.php" target="_blank">get_declared_classes</a>
<a href="http://php.net/manual/ja/function.ini-get-all.php" target="_blank">ini_get_all</a>

<a href="http://php.net/manual/ja/function.phpversion.php" target="_blank">phpversion</a>
<a href="http://php.net/manual/ja/function.php-ini-loaded-file.php" target="_blank">php_ini_loaded_file</a>
<a href="http://php.net/manual/ja/function.get-include-path.php" target="_blank">get_include_path</a>
<a href="http://php.net/manual/ja/function.get-magic-quotes-gpc.php" target="_blank">get_magic_quotes_gpc</a>


<a href="http://lightbox.on.coocan.jp/info.php" target="_blank">実行結果</a>

少し見づらいですが、調査する場合や簡単な確認のとっかかりにはなると思います。

</pre>
<div id="sh_5a8a21afb801b">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a8a21afb801b .syntaxhighlighter div,#sh_5a8a21afb801b .syntaxhighlighter span,#sh_5a8a21afb801b .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180219100031" class="brush:php;name:info">
&lt;!DOCTYPE html&gt;
&lt;html lang="ja"&gt;
&lt;head&gt;
&lt;meta charset="utf-8"&gt;
&lt;meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport"&gt;
&lt;title&gt;phpinfo の代替え&lt;/title&gt;
&lt;style&gt;
* {
	font-size: 12px;
	font-family: "ヒラギノ角ゴPro W6","Hiragino Kaku Gothic Pro W6","メイリオ",Meiryo,"ＭＳ Ｐゴシック",Verdana,Arial,Helvetica,sans-serif;
}

pre {
	white-space: pre-wrap;
	word-wrap: break-word;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body style='width:400px;margin:auto;border:1px solid #ccc;padding:12px;'&gt;

&lt;pre&gt;
&lt;?php

	print "PHP version : " . phpversion() . "\n";

	print "php.ini : " . php_ini_loaded_file() . "\n";
	print "include_path : " . get_include_path() . "\n";
	print "get_magic_quotes : " . get_magic_quotes_gpc . "\n";

	print "variables_order : " . ini_get('variables_order') . "\n";
	print "short_open_tag : " . ini_get('short_open_tag') . "\n";
	print "display_errors : " . ini_get('display_errors') . "\n";
	print "display_startup_errors : " . ini_get('display_startup_errors') . "\n";
	print "allow_url_fopen : " . ini_get('allow_url_fopen') . "\n";
	print "allow_url_include : " . ini_get('allow_url_include') . "\n";
	print "max_execution_time : " . ini_get('max_execution_time') . "\n";
	print "post_max_size : " . ini_get('post_max_size') . "\n";
	print "track_errors : " . ini_get('track_errors') . "\n";

	print "&lt;hr&gt;";
	print "&lt;b style='font-size:24;font-weight:bold'&gt;Loaded_extensions&lt;/b&gt;\n";

	// コンパイル/ロードされている全てのモジュールの名前を配列として返す
	$target = get_loaded_extensions();
	foreach( $target as $key =&gt; $value ) {
		print "$key =&gt; $value\n";
	}

	print "&lt;hr&gt;";
	print "&lt;b style='font-size:24;font-weight:bold'&gt;get_declared_classes&lt;/b&gt;\n";

	// 定義済のクラスの名前を配列として返す
	$classes = get_declared_classes();
	foreach( $classes as $key =&gt; $value ) {
		print "$key =&gt; $value\n";
	}

	// $_SERVER
	print "&lt;hr&gt;";
	print "&lt;b style='font-size:24;font-weight:bold'&gt;\$_SERVER&lt;/b&gt;\n";

	foreach( $_SERVER as $key =&gt; $value ) {
		print "$key =&gt; $value\n";
	}

	// $_ENV
	print "&lt;hr&gt;";
	print "&lt;b style='font-size:24;font-weight:bold'&gt;\$_ENV&lt;/b&gt;\n";

	foreach( $_ENV as $key =&gt; $value ) {
		print "$key =&gt; $value\n";
	}

	// すべての設定オプションを得る
	print "&lt;hr&gt;";
	print "&lt;b style='font-size:24;font-weight:bold'&gt;ini_get_all&lt;/b&gt;\n";
	$inis = ini_get_all();
	print_r($inis);

?&gt;
&lt;/pre&gt;

&lt;/body&gt;
&lt;/html&gt;

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180219100031"); 
</script>

<pre>



</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>LaCoocan</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/144330379</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/122130466.html</link>
      <title>MSXML2.(Server)XMLHTTPでファイルをアップロードする</title>
      <pubDate>Sun, 18 Feb 2018 16:12:07 +0900</pubDate>
            <description>呼び出し側は WSH としての VBScript です。バイナリとしてアップロードするので、CRLF は CRLF のままなので、LF へ変換が必要なファイルやシステムでは、サーバー側で変換する必要がありますPHP ならそのままで問題無いので、わざわざ 通常の POST 仕様にあわせる必要も無いと思います。VBScript 側のサンプルは Microsoft の サポートオンラインにあるので、IIS ではうまくいくのかとは思うのですが、試してはいません。いずれにしても、IIS..</description>
            <itunes:summary><![CDATA[

呼び出し側は WSH としての VBScript です。バイナリとしてアップロードするので、CRLF は CRLF のままなので、LF へ変換が必要なファイルやシステムでは、サーバー側で変換する必要があります

PHP ならそのままで問題無いので、わざわざ 通常の POST 仕様にあわせる必要も無いと思います。

VBScript 側のサンプルは <a href="http://support.microsoft.com/kb/296772/ja" target="_blank">Microsoft の サポートオンライン</a>にあるので、IIS ではうまくいくのかとは思うのですが、試してはいません。いずれにしても、IIS に対して行う場合はテストが必要です


テストはさくらインターネットの環境で行っています。<a href="https://lightbox.sakura.ne.jp/homepage/info.php" target="_blank">PHP は、5.6.32 でした</a>。

いったん PNG 画像をアップロードして、FileZilla でダウンロードして fc /b で比較しましたが問題無く同じものでした。テキストファイルも同じ結果で CRLF のままで返って来ています。ただ、rb wb を rt wt にしてもアップロードされたものは同じでした。ドキュメント通り、Windows の PHP 環境のみで効果があるのかもしれませんが、テストはできていません。

最初記事を書いたころは、MSXML2.XMLHTTP というクライアント用のオブジェクトを使用していましたが、Microsoft 側の変遷で現在は MSXML2.ServerXMLHTTP のほうが信頼性が高いと判断して使用しています。

<b>upload.vbs</b>


 
 
 

' *************************************
' サーバーオブジェクトを使用しています
' *************************************
Set objHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")
lResolve = 60 * 1000
lConnect = 60 * 1000
lSend = 60 * 1000
lReceive = 60 * 1000

' Stream オブジェクト の作成
Set Stream = CreateObject("ADODB.Stream")
' Stream のオープン
Stream.Open
' Stream タイプの指定
Stream.Type = 1		' StreamTypeEnum の adTypeBinary
' 既存ファイルの内容を Stream に読み込む
Stream.LoadFromFile "target.png"

' ▼ ご自分の環境に書き換えてください。
Call objHTTP.Open("POST","https://yourdomain/test/put.php",False)

nLen = Stream.Size
data = Stream.Read(nLen)

Call objHTTP.SetRequestHeader("Content-Length",nLen)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send(data)

Wscript.Echo objHTTP.responseText
 
' Stream を閉じる
Stream.Close







<b>put.php</b>


 
 
 

&lt;?PHP
header( "Content-Type: text/html; charset=utf-8" );

$id = uniqid();

$fp = fopen( "php://input", "rb" );
$wfp = fopen( "data/{$id}_upload.dat", "wb" );

while( $ret = fread( $fp, 4096 ) ) {

	fwrite( $wfp, $ret );

}

fclose($wfp);
fclose($fp);


?&gt;
データが保存されました







PHP は utf-8 で書いています。それ以外のキャラクタセットの場合は、http ヘッダに同じように設定しておかないと、XMLHTTP が日本語の変換をできないので注意して下さい。通常通り、使用しているキャラクタセットと http ヘッダを一致させればどのキャラクタセットでも問題ありません。

※ HTML 等の静的ページでは、サーバ側でキャラクタセツトの設定ができない場合は、UTF-8 扱いになってしまいます


<b> 関連する記事</b>

<a href="http://winofsql.jp/sh/html/getpart.htm" target="_blank">PHP + VBS 分割ダウンロード</a>
<a href="http://winofsql.jp/sh/html/file_copy.htm" target="_blank">バッチ処理的ファイルのコピー</a>
<a href="http://webcraft.seesaa.net/article/122661267.html" target="_blank">MSXML2.XMLHTTPでファイルをPOSTする</a>
<a href="http://webcraft.seesaa.net/article/122723906.html" target="_blank">prototype.js の Ajax.Request を使い、FORM を使わずにデータをPOSTする</a>



<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>
呼び出し側は WSH としての VBScript です。バイナリとしてアップロードするので、CRLF は CRLF のままなので、LF へ変換が必要なファイルやシステムでは、サーバー側で変換する必要があります

PHP ならそのままで問題無いので、わざわざ 通常の POST 仕様にあわせる必要も無いと思います。

VBScript 側のサンプルは <a href="http://support.microsoft.com/kb/296772/ja" target="_blank">Microsoft の サポートオンライン</a>にあるので、IIS ではうまくいくのかとは思うのですが、試してはいません。いずれにしても、IIS に対して行う場合はテストが必要です

<pre class="this bd">
テストはさくらインターネットの環境で行っています。<a href="https://lightbox.sakura.ne.jp/homepage/info.php" target="_blank">PHP は、5.6.32 でした</a>。

いったん PNG 画像をアップロードして、FileZilla でダウンロードして fc /b で比較しましたが問題無く同じものでした。テキストファイルも同じ結果で CRLF のままで返って来ています。ただ、rb wb を rt wt にしてもアップロードされたものは同じでした。ドキュメント通り、Windows の PHP 環境のみで効果があるのかもしれませんが、テストはできていません。

最初記事を書いたころは、MSXML2.XMLHTTP というクライアント用のオブジェクトを使用していましたが、Microsoft 側の変遷で現在は MSXML2.ServerXMLHTTP のほうが信頼性が高いと判断して使用しています。
</pre>
<b class=gttl>upload.vbs</b>
</pre>
<div id="sh_5a892495050c8">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a892495050c8 .syntaxhighlighter div,#sh_5a892495050c8 .syntaxhighlighter span,#sh_5a892495050c8 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180218160037" class="brush:vbs;name:upload">
' *************************************
' サーバーオブジェクトを使用しています
' *************************************
Set objHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")
lResolve = 60 * 1000
lConnect = 60 * 1000
lSend = 60 * 1000
lReceive = 60 * 1000

' Stream オブジェクト の作成
Set Stream = CreateObject("ADODB.Stream")
' Stream のオープン
Stream.Open
' Stream タイプの指定
Stream.Type = 1		' StreamTypeEnum の adTypeBinary
' 既存ファイルの内容を Stream に読み込む
Stream.LoadFromFile "target.png"

' ▼ ご自分の環境に書き換えてください。
Call objHTTP.Open("POST","https://yourdomain/test/put.php",False)

nLen = Stream.Size
data = Stream.Read(nLen)

Call objHTTP.SetRequestHeader("Content-Length",nLen)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send(data)

Wscript.Echo objHTTP.responseText
 
' Stream を閉じる
Stream.Close

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180218160037"); 
</script>
<pre>

<b class=gttl>put.php</b>
</pre>
<div id="sh_5a892510219e8">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a892510219e8 .syntaxhighlighter div,#sh_5a892510219e8 .syntaxhighlighter span,#sh_5a892510219e8 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180218160240" class="brush:php;name:put">
&lt;?PHP
header( "Content-Type: text/html; charset=utf-8" );

$id = uniqid();

$fp = fopen( "php://input", "rb" );
$wfp = fopen( "data/{$id}_upload.dat", "wb" );

while( $ret = fread( $fp, 4096 ) ) {

	fwrite( $wfp, $ret );

}

fclose($wfp);
fclose($fp);


?&gt;
データが保存されました

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180218160240"); 
</script>
<pre>

PHP は utf-8 で書いています。それ以外のキャラクタセットの場合は、http ヘッダに同じように設定しておかないと、XMLHTTP が日本語の変換をできないので注意して下さい。通常通り、使用しているキャラクタセットと http ヘッダを一致させればどのキャラクタセットでも問題ありません。

※ HTML 等の静的ページでは、サーバ側でキャラクタセツトの設定ができない場合は、UTF-8 扱いになってしまいます


<b class=gttl> 関連する記事</b>

<a href="http://winofsql.jp/sh/html/getpart.htm" target="_blank">PHP + VBS 分割ダウンロード</a>
<a href="http://winofsql.jp/sh/html/file_copy.htm" target="_blank">バッチ処理的ファイルのコピー</a>
<a href="http://webcraft.seesaa.net/article/122661267.html" target="_blank">MSXML2.XMLHTTPでファイルをPOSTする</a>
<a href="http://webcraft.seesaa.net/article/122723906.html" target="_blank">prototype.js の Ajax.Request を使い、FORM を使わずにデータをPOSTする</a>



</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>クライアント/サーバー</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/122130466</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/122129345.html</link>
      <title>テンプレートでその記事の編集画面に直接リンクする</title>
      <pubDate>Sun, 18 Feb 2018 01:47:34 +0900</pubDate>
            <description>posted by ニックネームの ニックネーム部分にリンクを作成します。これは、「記事」コンテンツの HTML テンプレートを編集します。( こうしておくと、記事のリライトはとっても楽です )   posted by &amp;lt;a href=&quot;http://blog.seesaa.jp/pages/my/blog/article/edit/input?id=&amp;lt;% article.id %&amp;gt;&quot; target=&quot;_blank&quot;&amp;gt;&amp;lt;% article.nic..</description>
            <itunes:summary><![CDATA[


posted by ニックネームの ニックネーム部分にリンクを作成します。これは、「記事」コンテンツの HTML テンプレートを編集します。( こうしておくと、記事のリライトはとっても楽です )



 
 
 

posted by &lt;a href="http://blog.seesaa.jp/pages/my/blog/article/edit/input?id=&lt;% article.id %&gt;" target="_blank"&gt;&lt;% article.nickname %&gt;&lt;/a&gt; at &lt;% article.createstamp | date_format("%Y-%m-%d %H:%M") -%&gt;







<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>

posted by ニックネームの ニックネーム部分にリンクを作成します。これは、「記事」コンテンツの HTML テンプレートを編集します。( こうしておくと、記事のリライトは<strong>とっても楽</strong>です )

</pre>
<div id="sh_5a885c6088666">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a885c6088666 .syntaxhighlighter div,#sh_5a885c6088666 .syntaxhighlighter span,#sh_5a885c6088666 .syntaxhighlighter code { 
	font-size:26px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180218014624" class="brush:html">
posted by &lt;a href="http://blog.seesaa.jp/pages/my/blog/article/edit/input?id=&lt;% article.id %&gt;" target="_blank"&gt;&lt;% article.nickname %&gt;&lt;/a&gt; at &lt;% article.createstamp | date_format("%Y-%m-%d %H:%M") -%&gt;
</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180218014624"); 
</script>
<pre>


</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>Seesaa</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/122129345</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/122129349.html</link>
      <title>Seesaaブログのテンプレート内で使用できる page_name 変数を JavaScript で使用する</title>
      <pubDate>Sun, 18 Feb 2018 01:40:26 +0900</pubDate>
            <description>page_name 変数は、テンプレート内で使用する変数なので、直接は使用できませんが、ヘッド部分に以下のコードを入れておけば後続のスクリプトで使用する事ができます   &amp;lt;script&amp;gt;var $page_name = &#39;&amp;lt;% page_name %&amp;gt;&#39;;&amp;lt;/script&amp;gt;具体的な使用方法としては、トップページは &#39;index&#39; になりますので、日付タイトルを以下のようにして非表示にする事ができます。   &amp;lt;script&amp;gt;if ..</description>
            <itunes:summary><![CDATA[


<a href="http://faq.seesaa.net/article/422864616.html" target="_blank">page_name 変数</a>は、<a href="http://blog-faq.seesaa.net/article/2412276.html" target="_blank">テンプレート内で使用する</a>変数なので、直接は使用できませんが、ヘッド部分に以下のコードを入れておけば後続のスクリプトで使用する事ができます


 
 
 

&lt;script&gt;
var $page_name = '&lt;% page_name %&gt;';
&lt;/script&gt;







具体的な使用方法としては、トップページは 'index' になりますので、日付タイトルを以下のようにして非表示にする事ができます。


 
 
 

&lt;script&gt;
if ( $page_name == 'index' ) {
	str="";
	str+="&lt;style&gt; \n";
	str+=".date { display:none; } \n";
	str+="&lt;/style&gt; ";
	document.write( str );
}
&lt;/script&gt;







あるいは、jQuery が使えるのであれば以下のように動的に追加も可能です。


 
 
 

&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"&gt;&lt;/script&gt;
&lt;script&gt;

$(function(){

	var style = $("&lt;style&gt;");
	style.text(".date { display:none; }");

	var target = $("head").eq(0);
	style.appendTo(target);

});

&lt;/script&gt;








さらに、トップページの記事数を1つにして、未来の当分来ない日付の記事を書き込めは、常に表示される「エントランス」を作成できます

注) 'tag' というページもあります



<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>

<a href="http://faq.seesaa.net/article/422864616.html" target="_blank">page_name 変数</a>は、<a href="http://blog-faq.seesaa.net/article/2412276.html" target="_blank">テンプレート内で使用する</a>変数なので、直接は使用できませんが、ヘッド部分に以下のコードを入れておけば後続のスクリプトで使用する事ができます
</pre>
<div id="sh_5a8857527de72">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a8857527de72 .syntaxhighlighter div,#sh_5a8857527de72 .syntaxhighlighter span,#sh_5a8857527de72 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180218012450" class="brush:js">
&lt;script&gt;
var $page_name = '&lt;% page_name %&gt;';
&lt;/script&gt;

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180218012450"); 
</script>
<pre>

具体的な使用方法としては、トップページは 'index' になりますので、日付タイトルを以下のようにして非表示にする事ができます。
</pre>
<div id="sh_5a8857b0b496f">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a8857b0b496f .syntaxhighlighter div,#sh_5a8857b0b496f .syntaxhighlighter span,#sh_5a8857b0b496f .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180218012624" class="brush:js">
&lt;script&gt;
if ( $page_name == 'index' ) {
	str="";
	str+="&lt;style&gt; \n";
	str+=".date { display:none; } \n";
	str+="&lt;/style&gt; ";
	document.write( str );
}
&lt;/script&gt;

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180218012624"); 
</script>
<pre>

あるいは、jQuery が使えるのであれば以下のように動的に追加も可能です。
</pre>
<div id="sh_5a885a38ac0b4">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a885a38ac0b4 .syntaxhighlighter div,#sh_5a885a38ac0b4 .syntaxhighlighter span,#sh_5a885a38ac0b4 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180218013712" class="brush:js">
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"&gt;&lt;/script&gt;
&lt;script&gt;

$(function(){

	var style = $("&lt;style&gt;");
	style.text(".date { display:none; }");

	var target = $("head").eq(0);
	style.appendTo(target);

});

&lt;/script&gt;

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180218013712"); 
</script>

<pre>

さらに、トップページの記事数を1つにして、未来の当分来ない日付の記事を書き込めは、常に表示される「エントランス」を作成できます

<strong><span style="color:#FF0000;">注) 'tag' というページもあります</span></strong>



</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>Seesaa</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/122129349</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/267501704.html</link>
      <title>『カーソル下の画像用HTMLの取得』を行うIE拡張をダイアログを表示して行う</title>
      <pubDate>Sun, 18 Feb 2018 01:07:56 +0900</pubDate>
            <description>画面定義を表示させます。( レジストリには &quot;Flags&quot;=dword:00000001 が必要です )ダイアログが表示された時、すでにテキストエリア内のコードはクリップボードにコピーされていますが、内容を変更して再度クリップボードにコピーする事ができます。get_img_html_clip.htm   &amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=..</description>
            <itunes:summary><![CDATA[

画面定義を表示させます。( レジストリには "Flags"=dword:00000001 が必要です )

<img src="https://lh3.googleusercontent.com/-xZK60eO-ePI/WohU1Fsn5II/AAAAAAAApOY/A-xHaFoxz6wQAsX1Fcncu4gb2pAidn-2wCHMYBhgL/s416/_img.png">

ダイアログが表示された時、すでにテキストエリア内のコードはクリップボードにコピーされていますが、内容を変更して再度クリップボードにコピーする事ができます。
<b>get_img_html_clip.htm</b>


 
 
 

&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS"&gt;
&lt;title&gt;カーソル下の画像用HTMLの取得&lt;/title&gt;
&lt;script language="JavaScript"&gt;

	// *************************************************
	// ウインドウサイズ
	// *************************************************
	window.dialogWidth = "400px";
	window.dialogHeight = "300px";

	// 対象となるオブジェクト( ここでは画像 )
	var obj = external.menuArguments.event.srcElement;

&lt;/script&gt;
&lt;/head&gt;
&lt;body style='padding:20px;'&gt;
&lt;textarea id="text" style='width:300px;height:200px;'&gt;&lt;/textarea&gt;
&lt;br&gt;
&lt;input
	type="button"
	value="クリップボードにコピー"
	onclick='window.clipboardData.setData("Text", document.getElementById("text").value );window.close();'&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;script language="JavaScript"&gt;

	// カーソル下の HTML
	str = obj.outerHTML;

	// クリップボードにセット
	window.clipboardData.setData("Text",str );

	// テキストエリアにセット
	document.getElementById("text").value = str;

&lt;/script&gt;







▼ レジストリ登録用 install.reg


 
 
 

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\=&gt; カーソル下の画像用HTMLの取得とクリップボード]
@="C:\\Users\\lightbox\\AppData\\Roaming\\laylaClass\\menuex\\get_img_html_clip.htm"
"Contexts"=dword:00000002
"Flags"=dword:00000001








▼ レジストリよりアンインストール用 unistall.reg


 
 
 

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\=&gt; カーソル下の画像用HTMLの取得とクリップボード]









<b>関連する記事</b>

<a href="http://webcraft.seesaa.net/article/267493616.html">IE拡張を作成する為の基本仕様</a>
<a href="http://webcraft.seesaa.net/article/263446365.html">ブラウザ拡張の中で一番簡単な IE 拡張 : カーソル下の画像用HTMLの取得</a>


<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>
画面定義を表示させます。( レジストリには "Flags"=dword:00000001 が必要です )

<img src="https://lh3.googleusercontent.com/-xZK60eO-ePI/WohU1Fsn5II/AAAAAAAApOY/A-xHaFoxz6wQAsX1Fcncu4gb2pAidn-2wCHMYBhgL/s416/_img.png" >

ダイアログが表示された時、すでにテキストエリア内のコードはクリップボードにコピーされていますが、内容を変更して再度クリップボードにコピーする事ができます。
<b class=sttl>get_img_html_clip.htm</b>
</pre>
<div id="sh_5a885151e954e">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a885151e954e .syntaxhighlighter div,#sh_5a885151e954e .syntaxhighlighter span,#sh_5a885151e954e .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180218005913" class="brush:htm;name=get_img_html_clip">
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS"&gt;
&lt;title&gt;カーソル下の画像用HTMLの取得&lt;/title&gt;
&lt;script language="JavaScript"&gt;

	// *************************************************
	// ウインドウサイズ
	// *************************************************
	window.dialogWidth = "400px";
	window.dialogHeight = "300px";

	// 対象となるオブジェクト( ここでは画像 )
	var obj = external.menuArguments.event.srcElement;

&lt;/script&gt;
&lt;/head&gt;
&lt;body style='padding:20px;'&gt;
&lt;textarea id="text" style='width:300px;height:200px;'&gt;&lt;/textarea&gt;
&lt;br&gt;
&lt;input
	type="button"
	value="クリップボードにコピー"
	onclick='window.clipboardData.setData("Text", document.getElementById("text").value );window.close();'&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;script language="JavaScript"&gt;

	// カーソル下の HTML
	str = obj.outerHTML;

	// クリップボードにセット
	window.clipboardData.setData("Text",str );

	// テキストエリアにセット
	document.getElementById("text").value = str;

&lt;/script&gt;

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180218005913"); 
</script>
<pre>

▼ レジストリ登録用 install.reg
</pre>
<div id="sh_5a885193a3fd0">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a885193a3fd0 .syntaxhighlighter div,#sh_5a885193a3fd0 .syntaxhighlighter span,#sh_5a885193a3fd0 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180218010019" class="brush:reg;name=install">
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\=&gt; カーソル下の画像用HTMLの取得とクリップボード]
@="C:\\Users\\lightbox\\AppData\\Roaming\\laylaClass\\menuex\\get_img_html_clip.htm"
"Contexts"=dword:00000002
"Flags"=dword:00000001


</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180218010019"); 
</script>
<pre>

▼ レジストリよりアンインストール用 unistall.reg
</pre>
<div id="sh_5a8852ab9323d">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a8852ab9323d .syntaxhighlighter div,#sh_5a8852ab9323d .syntaxhighlighter span,#sh_5a8852ab9323d .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180218010459" class="brush:reg;name=unistall">
Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\=&gt; カーソル下の画像用HTMLの取得とクリップボード]


</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180218010459"); 
</script>

<pre>

<b class=sttl>関連する記事</b>

<a href="http://webcraft.seesaa.net/article/267493616.html">IE拡張を作成する為の基本仕様</a>
<a href="http://webcraft.seesaa.net/article/263446365.html">ブラウザ拡張の中で一番簡単な IE 拡張 : カーソル下の画像用HTMLの取得</a>


</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>IE拡張</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/267501704</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/267493616.html</link>
      <title>IE 拡張を作成する為の基本仕様</title>
      <pubDate>Sun, 18 Feb 2018 00:27:11 +0900</pubDate>
            <description>かなり古い Microsoft のドキュメントに記述されている内容ですが、以下のような内容になります。登録は、レジストリに直接登録しますが、登録時は IE を終了させておいて下さい。変更する場合も IE を終了させる必要があります。レジストリの登録場所   HKEY_CURRENT_USER       Software           Microsoft               Internet Explorer                   MenuExtこ..</description>
            <itunes:summary><![CDATA[

<a href="https://web.archive.org/web/20131126045456/http://msdn.microsoft.com:80/en-us/library/bb735853(VS.85).aspx" target="_blank">かなり古い Microsoft のドキュメント</a>に記述されている内容ですが、以下のような内容になります。登録は、レジストリに直接登録しますが、登録時は IE を終了させておいて下さい。変更する場合も IE を終了させる必要があります。

<b>レジストリの登録場所</b>


 
 
 

HKEY_CURRENT_USER
       Software
           Microsoft
               Internet Explorer
                   MenuExt







このキーの下に、メニューに表示させる項目名をキー名としてキーを作成しますこのキー名がメニュー項目としてそのまま表示されます。


 
 
 

HKEY_CURRENT_USER
       Software
           Microsoft
               Internet Explorer
                   MenuExt
                       メニュー名 = c:\myscript.htm







※ c:\myscript.htm は http:// ではじまる URL でもかまいません
レジストリデータ的には、(規定) にセットします

@="http://winofsql.jp/html/get_img_html.htm"
"Contexts"=dword:00000002

Contexts　は、右クリックした時のカーソル下のオブジェクトによって拡張メニーを表示するかしないかを決定する値を ビットの論理 OR で指定します。上記例は『画像』のみを対象としています。

(0x1 &lt;&lt; CONTEXT_MENU_DEFAULT) (evaluates to 0x1)
(0x1 &lt;&lt; CONTEXT_MENU_IMAGE) (evaluates to 0x2)
(0x1 &lt;&lt; CONTEXT_MENU_CONTROL) (evaluates to 0x4) 
(0x1 &lt;&lt; CONTEXT_MENU_TABLE) (evaluates to 0x8)
(0x1 &lt;&lt; CONTEXT_MENU_TEXTSELECT) (evaluates to 0x10)
(0x1 &lt;&lt; CONTEXT_MENU_ANCHOR) (evaluates to 0x20)
(0x1 &lt;&lt; CONTEXT_MENU_UNKNOWN) (evaluates to 0x40)
※ CONTROL は、入力関連です。

<b>ダイアログ表示オプション</b>

もう 1 つのオプションは DWORD 値の "Flags" です。これは 1 ビットの値 (0x1) で、このビットを設定すると、スクリプトは ShowModalDialog を使って呼び出されます。これにより、スクリプトをロードしたウィンドウは隠されず、自動的に閉じることもありません。

external.menuArugments の値はメニューを選択した Window オブジェクトを保持したままとなります。

※ external.menuArugments は、そのページの window オブジェクトです。

<b>後発の仕様変更</b>

実行ファイルの拡張子は .htm または .html である必要があります。external.menuArugments は windows オブジェクトですが、現在の
 URL が必要な場合、location オブジェクトを直接操作できないので、document.URL を使用します。


<b>関連する記事</b>

<a href="http://webcraft.seesaa.net/article/263446365.html">ブラウザ拡張の中で一番簡単な IE 拡張 : カーソル下の画像用HTMLの取得</a>



<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>
<a href="https://web.archive.org/web/20131126045456/http://msdn.microsoft.com:80/en-us/library/bb735853(VS.85).aspx" target="_blank">かなり古い Microsoft のドキュメント</a>に記述されている内容ですが、以下のような内容になります。登録は、レジストリに直接登録しますが、登録時は IE を終了させておいて下さい。変更する場合も IE を終了させる必要があります。

<b class=sttl>レジストリの登録場所</b>
</pre>
<div id="sh_5a884ab495d45">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a884ab495d45 .syntaxhighlighter div,#sh_5a884ab495d45 .syntaxhighlighter span,#sh_5a884ab495d45 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180218003100" class="brush:text">
HKEY_CURRENT_USER
       Software
           Microsoft
               Internet Explorer
                   MenuExt
</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180218003100"); 
</script>

<pre>

このキーの下に、メニューに表示させる項目名をキー名としてキーを作成しますこのキー名がメニュー項目としてそのまま表示されます。
</pre>
<div id="sh_5a884adcdba69">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a884adcdba69 .syntaxhighlighter div,#sh_5a884adcdba69 .syntaxhighlighter span,#sh_5a884adcdba69 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180218003140" class="brush:text">
HKEY_CURRENT_USER
       Software
           Microsoft
               Internet Explorer
                   MenuExt
                       メニュー名 = c:\myscript.htm
</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180218003140"); 
</script>

<pre>

※ c:\myscript.htm は http:// ではじまる URL でもかまいません
レジストリデータ的には、(規定) にセットします

<strong>@="http://winofsql.jp/html/get_img_html.htm"
"Contexts"=dword:00000002</strong>

Contexts　は、右クリックした時のカーソル下のオブジェクトによって拡張メニーを表示するかしないかを決定する値を ビットの論理 OR で指定します。上記例は『画像』のみを対象としています。

<strong>(0x1 << CONTEXT_MENU_DEFAULT) (evaluates to 0x1)
(0x1 << CONTEXT_MENU_IMAGE) (evaluates to 0x2)
(0x1 << CONTEXT_MENU_CONTROL) (evaluates to 0x4) 
(0x1 << CONTEXT_MENU_TABLE) (evaluates to 0x8)
(0x1 << CONTEXT_MENU_TEXTSELECT) (evaluates to 0x10)
(0x1 << CONTEXT_MENU_ANCHOR) (evaluates to 0x20)
(0x1 << CONTEXT_MENU_UNKNOWN) (evaluates to 0x40)</strong>
※ CONTROL は、入力関連です。

<b class=sttl>ダイアログ表示オプション</b>

もう 1 つのオプションは DWORD 値の "Flags" です。これは 1 ビットの値 (0x1) で、このビットを設定すると、スクリプトは ShowModalDialog を使って呼び出されます。これにより、スクリプトをロードしたウィンドウは隠されず、自動的に閉じることもありません。

external.menuArugments の値はメニューを選択した Window オブジェクトを保持したままとなります。

※ external.menuArugments は、そのページの window オブジェクトです。

<b class=sttl>後発の仕様変更</b>

実行ファイルの拡張子は .htm または .html である必要があります。external.menuArugments は windows オブジェクトですが、現在の
 URL が必要な場合、location オブジェクトを直接操作できないので、document.URL を使用します。


<b class=sttl>関連する記事</b>

<a href="http://webcraft.seesaa.net/article/263446365.html">ブラウザ拡張の中で一番簡単な IE 拡張 : カーソル下の画像用HTMLの取得</a>



</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>IE拡張</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/267493616</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/263446365.html</link>
      <title>ブラウザ拡張の中で一番簡単な IE 拡張 : カーソル下の画像用HTMLの取得</title>
      <pubDate>Sat, 17 Feb 2018 03:10:37 +0900</pubDate>
            <description>インストールは少し面倒ですが、いったんインストールしてしまえば修正やデバッグもすぐに反映されます。ただ、詳細なドキュメントを探すのに苦労する事と、今までいろいろ変遷があって、なかなか解りづらい問題がたくさんあって、あまり一般的には使われていないのが現実です。例えば、最初のころは、そのページの URL を操作するのに、location オブジェクトが使えたのですが、今では、document オブジェクトの URL プロパティを使用するようになっています。get_img_html..</description>
            <itunes:summary><![CDATA[

インストールは少し面倒ですが、いったんインストールしてしまえば修正やデバッグもすぐに反映されます。

ただ、<a href="https://web.archive.org/web/20131126045456/http://msdn.microsoft.com:80/en-us/library/bb735853(VS.85).aspx" target="_blank">詳細なドキュメントを探すのに苦労する事</a>と、今までいろいろ変遷があって、なかなか解りづらい問題がたくさんあって、あまり一般的には使われていないのが現実です。例えば、最初のころは、そのページの URL を操作するのに、location オブジェクトが使えたのですが、今では、document オブジェクトの URL プロパティを使用するようになっています。

<b>get_img_html.htm</b>


 
 
 

&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS"&gt;
&lt;title&gt;カーソル下の画像用HTMLの取得&lt;/title&gt;
&lt;script language="JavaScript"&gt;

	var RegName,strLocation,obj;

	RegName = "=&gt; カーソル下の画像用HTMLの取得";

	// ここでは使用しませんが、URL は document 経由で利用する必要があります
	strLocation = external.menuArguments.document.URL;

	// SHIFTとCTRLとALT用変数
	var keyflg1,keyflg2,keyflg3;
	keyflg1 = false;	// SHIFT
	keyflg2 = false;	// CTL
	keyflg3 = false;	// ALT

	// 対象となるオブジェクト( ここでは画像 )
	obj = external.menuArguments.event.srcElement;

&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;!--SHIFTとCTRLが押されているかどうかを取得するボタン--&gt;
&lt;input id="btn" type=button onClick='keyflg1=window.event.shiftKey;keyflg2=window.event.ctrlKey;keyflg3=window.event.altKey;'&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;script language="JavaScript"&gt;

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

	var str;

	try {
		str = obj.outerHTML;
		// 独自の構成にする場合等
		// str = '&lt;img src="' + obj.src + '"';
		// str += ' style="border: solid 0px #000000"&gt;';

		// クリップボードにセット
		window.clipboardData.setData("Text",str);
	}
	catch(e){
		str = "処理できませんでした　　　";
	}

	alert(str)

&lt;/script&gt;








このコードを get_img_html.htm として SHIFT_JIS で保存して好きなフォルダへ保存し、レジストリエディタで登録するだけで利用可能になります。



 
 
 

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\=&gt; カーソル下の画像用HTMLの取得]
@="C:\\Users\\lightbox\\AppData\\Roaming\\laylaClass\\menuex\\get_img_html.htm"
"Contexts"=dword:00000002







<a href="https://web.archive.org/web/20130531234331/http://support.microsoft.com/kb/177241/ja" target="_blank">00000002 は、画像が対象である事を示しています</a>

<b>アンインストール</b>

以下の VBScript をダウンロードして実行して下さい( get_img_html.htm は削除されませんがレジストリからは削除されます )


 
 
 

' 管理者として実行を強制する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName &amp; " runas", "", "runas", 1
	Wscript.Quit
end if

Set WshShell = CreateObject( "WScript.Shell" )
WshShell.RegDelete( "HKCU\Software\Microsoft\Internet Explorer\MenuExt\=&gt; カーソル下の画像用HTMLの取得\" )







<b>メニューのタイトルについて</b>

MenuExt　の下に作成するキーがそのままタイトルになるのですが、順序は文字順になるので、任意の記号を使って使いやすい順序にカスタマイズすればいいと思います。( 但し、その場合は、アンインストール用の文字列も変更する必要があります )

<b>関連する記事</b>

<a href="http://logicalerror.seesaa.net/article/189625602.html" target="_blank">Seesaa の記事カテゴリをソートする IE 拡張</a>
<a href="http://logicalerror.seesaa.net/article/125367528.html" target="_blank">IE拡張メニュー : Seesaa のリンクコンテンツを一瞬でソートする</a>


<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>
インストールは少し面倒ですが、いったんインストールしてしまえば修正やデバッグもすぐに反映されます。

ただ、<a href="https://web.archive.org/web/20131126045456/http://msdn.microsoft.com:80/en-us/library/bb735853(VS.85).aspx" target="_blank">詳細なドキュメントを探すのに苦労する事</a>と、今までいろいろ変遷があって、なかなか解りづらい問題がたくさんあって、あまり一般的には使われていないのが現実です。例えば、最初のころは、そのページの URL を操作するのに、location オブジェクトが使えたのですが、今では、document オブジェクトの URL プロパティを使用するようになっています。

<b class=sttl>get_img_html.htm</b>
</pre>
<div id="sh_5a8718818c4e6">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a8718818c4e6 .syntaxhighlighter div,#sh_5a8718818c4e6 .syntaxhighlighter span,#sh_5a8718818c4e6 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180217024433" class="brush:htm;name:get_img_html">
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS"&gt;
&lt;title&gt;カーソル下の画像用HTMLの取得&lt;/title&gt;
&lt;script language="JavaScript"&gt;

	var RegName,strLocation,obj;

	RegName = "=&gt; カーソル下の画像用HTMLの取得";

	// ここでは使用しませんが、URL は document 経由で利用する必要があります
	strLocation = external.menuArguments.document.URL;

	// SHIFTとCTRLとALT用変数
	var keyflg1,keyflg2,keyflg3;
	keyflg1 = false;	// SHIFT
	keyflg2 = false;	// CTL
	keyflg3 = false;	// ALT

	// 対象となるオブジェクト( ここでは画像 )
	obj = external.menuArguments.event.srcElement;

&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;!--SHIFTとCTRLが押されているかどうかを取得するボタン--&gt;
&lt;input id="btn" type=button onClick='keyflg1=window.event.shiftKey;keyflg2=window.event.ctrlKey;keyflg3=window.event.altKey;'&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;script language="JavaScript"&gt;

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

	var str;

	try {
		str = obj.outerHTML;
		// 独自の構成にする場合等
		// str = '&lt;img src="' + obj.src + '"';
		// str += ' style="border: solid 0px #000000"&gt;';

		// クリップボードにセット
		window.clipboardData.setData("Text",str);
	}
	catch(e){
		str = "処理できませんでした　　　";
	}

	alert(str)

&lt;/script&gt;


</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180217024433"); 
</script>

<pre>
このコードを get_img_html.htm として SHIFT_JIS で保存して好きなフォルダへ保存し、レジストリエディタで登録するだけで利用可能になります。
</pre>

<div id="sh_5a8712a60e186">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a8712a60e186 .syntaxhighlighter div,#sh_5a8712a60e186 .syntaxhighlighter span,#sh_5a8712a60e186 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180217021934" class="brush:reg">
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\=&gt; カーソル下の画像用HTMLの取得]
@="C:\\Users\\lightbox\\AppData\\Roaming\\laylaClass\\menuex\\get_img_html.htm"
"Contexts"=dword:00000002

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180217021934"); 
</script>

<pre>
<a href="https://web.archive.org/web/20130531234331/http://support.microsoft.com/kb/177241/ja" target="_blank">00000002 は、画像が対象である事を示しています</a>

<b class=ttl>アンインストール</b>

以下の VBScript をダウンロードして実行して下さい( get_img_html.htm は削除されませんがレジストリからは削除されます )
</pre>
<div id="sh_5a871e5c486f6">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a871e5c486f6 .syntaxhighlighter div,#sh_5a871e5c486f6 .syntaxhighlighter span,#sh_5a871e5c486f6 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180217030932" class="brush:vbs;name=uninstall_get_img_html">
' 管理者として実行を強制する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName &amp; " runas", "", "runas", 1
	Wscript.Quit
end if

Set WshShell = CreateObject( "WScript.Shell" )
WshShell.RegDelete( "HKCU\Software\Microsoft\Internet Explorer\MenuExt\=&gt; カーソル下の画像用HTMLの取得\" )
</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180217030932"); 
</script>

<pre>

<b class=ttl>メニューのタイトルについて</b>

MenuExt　の下に作成するキーがそのままタイトルになるのですが、順序は文字順になるので、任意の記号を使って使いやすい順序にカスタマイズすればいいと思います。( 但し、その場合は、アンインストール用の文字列も変更する必要があります )

<b class=sttl>関連する記事</b>

<a href="http://logicalerror.seesaa.net/article/189625602.html" target="_blank">Seesaa の記事カテゴリをソートする IE 拡張</a>
<a href="http://logicalerror.seesaa.net/article/125367528.html" target="_blank">IE拡張メニュー : Seesaa のリンクコンテンツを一瞬でソートする</a>


</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>IE拡張</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/263446365</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/456930107.html</link>
      <title>ブラウザ上のテキストをレジストリデータのエクスポートである .reg として保存させる JavaScript のコード</title>
      <pubDate>Sat, 17 Feb 2018 00:17:36 +0900</pubDate>
            <description>FileSaver.js でローカルにテキストファイルを保存させる事ができます。その際、テキストデータを JavaScript の unicode の配列に変換して、さらに Uint16Array で new Blob() に渡す為のデータに変換します。先頭に unicode 用の BOM をセットして保存すると、unicode のテキストして保存されます。これは、拡張子が .reg のデータを保存する為に行っていますが、実際には shift_jis のデータでも Windo..</description>
            <itunes:summary><![CDATA[

FileSaver.js でローカルにテキストファイルを保存させる事ができます。その際、テキストデータを JavaScript の unicode の配列に変換して、さらに Uint16Array で new Blob() に渡す為のデータに変換します。先頭に unicode 用の BOM をセットして保存すると、unicode のテキストして保存されます。

これは、拡張子が .reg のデータを保存する為に行っていますが、実際には shift_jis のデータでも Windows には登録できると思います。ただ、その場合はもう一つライブラリが必要になります。

<a href="http://logicalerror.seesaa.net/article/456529156.html" target="_blank">JavaScript の内部コード文字列を SHIFT_JIS としてダウンロードさせる方法</a>



 
 
 

&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2014-11-29/FileSaver.min.js"&gt;&lt;/script&gt;
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"&gt;&lt;/script&gt;

&lt;script&gt;
$(function(){
	
	$("#btn").on("click",function(){

		var text = $("#text").val();
		text = text.replace(/\n/g, '\r\n');
		var array = str2array( text );
		var unicode_data = new Uint16Array(array);
		var bom = new Uint8Array([0xFF, 0xFE]);	// unicode bom
		saveAs( new Blob( [bom,unicode_data], {type: "text/plain;charset=unicode"})
				,"target.reg"
		);		

	});
});

var str2array = function(str) {
	var array = [],i,il=str.length;
	for(i=0;i&lt;il;i++) array.push(str.charCodeAt(i));
	return array;
};
&lt;/script&gt;

&lt;textarea id="text" style='width:400px;height:100px;'&gt;&lt;/textarea&gt;
&lt;br&gt;
&lt;input id="btn" type="button" value="保存"&gt; 









<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>
FileSaver.js でローカルにテキストファイルを保存させる事ができます。その際、テキストデータを JavaScript の unicode の配列に変換して、さらに Uint16Array で new Blob() に渡す為のデータに変換します。先頭に unicode 用の BOM をセットして保存すると、unicode のテキストして保存されます。

これは、拡張子が .reg のデータを保存する為に行っていますが、実際には shift_jis のデータでも Windows には登録できると思います。ただ、その場合はもう一つライブラリが必要になります。

<a href="http://logicalerror.seesaa.net/article/456529156.html" target="_blank">JavaScript の内部コード文字列を SHIFT_JIS としてダウンロードさせる方法</a>

</pre>
<div id="sh_5a86f33d127ba">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_5a86f33d127ba .syntaxhighlighter div,#sh_5a86f33d127ba .syntaxhighlighter span,#sh_5a86f33d127ba .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code180217000533" class="brush:html">
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2014-11-29/FileSaver.min.js"&gt;&lt;/script&gt;
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"&gt;&lt;/script&gt;

&lt;script&gt;
$(function(){
	
	$("#btn").on("click",function(){

		var text = $("#text").val();
		text = text.replace(/\n/g, '\r\n');
		var array = str2array( text );
		var unicode_data = new Uint16Array(array);
		var bom = new Uint8Array([0xFF, 0xFE]);	// unicode bom
		saveAs( new Blob( [bom,unicode_data], {type: "text/plain;charset=unicode"})
				,"target.reg"
		);		

	});
});

var str2array = function(str) {
	var array = [],i,il=str.length;
	for(i=0;i&lt;il;i++) array.push(str.charCodeAt(i));
	return array;
};
&lt;/script&gt;

&lt;textarea id="text" style='width:400px;height:100px;'&gt;&lt;/textarea&gt;
&lt;br&gt;
&lt;input id="btn" type="button" value="保存"&gt; 
</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code180217000533"); 
</script>
<pre>



</pre>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>JavaScript</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/456930107</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/444135717.html</link>
      <title>Google Visualization API の円グラフと通常テーブルの表示を jQuery のプラグインで作成する</title>
      <pubDate>Sat, 19 Nov 2016 18:23:09 +0900</pubDate>
            <description>Google Visualization を扱う時に基本部分となる円グラフの表示です。その表示の為に DataTable オブジェクトを作成しますが、それを単純に表示する為にテーブル表示部分(google.visualization.Table)も実装しています※ ライブラリのロードは {&#39;packages&#39;:[&#39;corechart&#39;,&#39;table&#39;]} ですGoogle の ドキュメント内の『オプション一覧』Google のドキュメントの 『円グラフのクイック・スタート』 ..</description>
            <itunes:summary><![CDATA[

Google Visualization を扱う時に基本部分となる円グラフの表示です。その表示の為に DataTable オブジェクトを作成しますが、それを単純に表示する為にテーブル表示部分(google.visualization.Table)も実装しています

※ ライブラリのロードは {'packages':['corechart','table']} です

<a href="https://developers.google.com/chart/interactive/docs/gallery/table#configuration-options" target="_blank">Google の ドキュメント内の『オプション一覧』</a>

<a href="https://developers.google.com/chart/interactive/docs/quick_start" target="_blank">Google のドキュメントの 『円グラフのクイック・スタート』</a>



 
 
 

&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"&gt;&lt;/script&gt;
&lt;script src="https://www.gstatic.com/charts/loader.js"&gt;&lt;/script&gt;

&lt;style&gt;
#table_area .google-visualization-table-table {
	border-collapse: collapse;
}

.myHeader {
	color:#ffffff;
	background: #123456;
	padding: 12px!important
	border: solid #303030 1px;
}
.myCell {
	padding: 12px!important;
	border: solid #303030 1px!important;
}
&lt;/style&gt;

&lt;script&gt;
var testData = 
[
	12543,
	326,
	2890,
	1112,
	200,
	8891,
	6333
];

// *********************************************
// jQuery を使用して画面上の
// コンテンツがロードされてから
// google.visualization をロード
// *********************************************
$(function(){
	google.charts.load('current', {'packages':['corechart','table']});
	google.charts.setOnLoadCallback(function(){
		// *********************************************
		// jQuery によるプラグイン化
		// *********************************************
		$.fn.extend({
			gv_getData: function() {
				return $(this).data("DataTable");
			},
			gv_setData: function() {
				if (arguments.length == 1) {
					// 引数がある場合は引数の DataTable をセットする
					$(this).data("DataTable",arguments[0]);
				}
				else {
					// 引数が無い場合は初期化した DataTable をセットする
					$(this).data("DataTable", new google.visualization.DataTable());
				}
				return this;
			},
			gv_addColumn: function(title){
				$(this).data("DataTable").addColumn('string', title);
				return this;
			},
			gv_addNumColumn: function(title){
				$(this).data("DataTable").addColumn('number', title);
				return this;
			},
			gv_addRow: function(){
				$(this).data("CurRow", $(this).data("DataTable").addRow() );
				return this;
			},
			gv_setCell: function(col, data){
				$(this).data("DataTable").setCell($(this).data("CurRow"), col, data+"" );
				return this;
			},
			gv_setNumCell: function(col, data){
				$(this).data("DataTable").setCell($(this).data("CurRow"), col, data );
				return this;
			},
			gv_setRowCell: function(row, col, data){
				$(this).data("DataTable").setCell(row, col, data+"" );
				return this;
			},
			gv_setRowNumCell: function(row, col, data){
				$(this).data("DataTable").setCell(row, col, data );
				return this;
			},
			gv_table: function(options){
				var visualization = new google.visualization.Table($(this).get(0));
				visualization.draw($(this).data("DataTable"), options);
				return this;
			},
			gv_pie: function(options){
				var visualization = new google.visualization.PieChart($(this).get(0));
				visualization.draw($(this).data("DataTable"), options);
				return this;
			}
		});

	
		// *********************************************
		// 初期の実行
		// *********************************************
		drawPieChart()
	});
});

// *********************************************
// visualization のロード完了時に実行
// *********************************************
function drawPieChart() {

	var pie_chart 	= $("#pie_chart_area");
	var table_area = $("#table_area");

	// ***************************************
	// 円グラフ作成
	// ***************************************
	pie_chart 
		.gv_setData()						// DataTable の初期化
		.gv_addColumn('分類')				// 列追加
		.gv_addNumColumn('データ');		// 列追加

	// ***************************************
	// 円グラフ内に DataTable を作成
	// ***************************************
	for( var i = 0; i &lt; testData.length; i++ ) {
		pie_chart 
			.gv_addRow()				// 行追加
			.gv_setCell(0,"分類"+(i+1))		// カラムデータセット
			.gv_setNumCell(1,testData[i]);	// カラムデータセット
	}

	// ***************************************
	// 円グラフ描画
	// ***************************************
	pie_chart.gv_pie({
		width: 500,
		height: 400,
		is3D: true,
		title: '円グラフの表示',
		legend: 'right'
	});

	// ***************************************
	// pie_chart で作成した DataTable
	//  を使ってテーブルを表示する
	// ***************************************
	table_area
		.gv_setData(pie_chart.gv_getData())		// データのセット
		.gv_table({
			width: 300,
			cssClassNames: {
				tableCell: 'myCell',
				headerCell: 'myHeader'
			},
			showRowNumber: true
		});

}

&lt;/script&gt;
&lt;div id="pie_chart_area"&gt;&lt;/div&gt;
&lt;div id="table_area"&gt;&lt;/div&gt;








▼ デモ












<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre class=w6>
Google Visualization を扱う時に基本部分となる円グラフの表示です。その表示の為に DataTable オブジェクトを作成しますが、それを単純に表示する為にテーブル表示部分(google.visualization.Table)も実装しています

<strong>※ ライブラリのロードは {'packages':['corechart','table']} です</strong>

<a href="https://developers.google.com/chart/interactive/docs/gallery/table#configuration-options" target="_blank">Google の ドキュメント内の『オプション一覧』</a>

<a href="https://developers.google.com/chart/interactive/docs/quick_start" target="_blank">Google のドキュメントの 『円グラフのクイック・スタート』</a>

</pre>
<div id="sh_58301911c4787">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_58301911c4787 .syntaxhighlighter div,#sh_58301911c4787 .syntaxhighlighter span,#sh_58301911c4787 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre name="code161119181913" class="brush:js">
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"&gt;&lt;/script&gt;
&lt;script src="https://www.gstatic.com/charts/loader.js"&gt;&lt;/script&gt;

&lt;style&gt;
#table_area .google-visualization-table-table {
	border-collapse: collapse;
}

.myHeader {
	color:#ffffff;
	background: #123456;
	padding: 12px!important
	border: solid #303030 1px;
}
.myCell {
	padding: 12px!important;
	border: solid #303030 1px!important;
}
&lt;/style&gt;

&lt;script&gt;
var testData = 
[
	12543,
	326,
	2890,
	1112,
	200,
	8891,
	6333
];

// *********************************************
// jQuery を使用して画面上の
// コンテンツがロードされてから
// google.visualization をロード
// *********************************************
$(function(){
	google.charts.load('current', {'packages':['corechart','table']});
	google.charts.setOnLoadCallback(function(){
		// *********************************************
		// jQuery によるプラグイン化
		// *********************************************
		$.fn.extend({
			gv_getData: function() {
				return $(this).data("DataTable");
			},
			gv_setData: function() {
				if (arguments.length == 1) {
					// 引数がある場合は引数の DataTable をセットする
					$(this).data("DataTable",arguments[0]);
				}
				else {
					// 引数が無い場合は初期化した DataTable をセットする
					$(this).data("DataTable", new google.visualization.DataTable());
				}
				return this;
			},
			gv_addColumn: function(title){
				$(this).data("DataTable").addColumn('string', title);
				return this;
			},
			gv_addNumColumn: function(title){
				$(this).data("DataTable").addColumn('number', title);
				return this;
			},
			gv_addRow: function(){
				$(this).data("CurRow", $(this).data("DataTable").addRow() );
				return this;
			},
			gv_setCell: function(col, data){
				$(this).data("DataTable").setCell($(this).data("CurRow"), col, data+"" );
				return this;
			},
			gv_setNumCell: function(col, data){
				$(this).data("DataTable").setCell($(this).data("CurRow"), col, data );
				return this;
			},
			gv_setRowCell: function(row, col, data){
				$(this).data("DataTable").setCell(row, col, data+"" );
				return this;
			},
			gv_setRowNumCell: function(row, col, data){
				$(this).data("DataTable").setCell(row, col, data );
				return this;
			},
			gv_table: function(options){
				var visualization = new google.visualization.Table($(this).get(0));
				visualization.draw($(this).data("DataTable"), options);
				return this;
			},
			gv_pie: function(options){
				var visualization = new google.visualization.PieChart($(this).get(0));
				visualization.draw($(this).data("DataTable"), options);
				return this;
			}
		});

	
		// *********************************************
		// 初期の実行
		// *********************************************
		drawPieChart()
	});
});

// *********************************************
// visualization のロード完了時に実行
// *********************************************
function drawPieChart() {

	var pie_chart 	= $("#pie_chart_area");
	var table_area = $("#table_area");

	// ***************************************
	// 円グラフ作成
	// ***************************************
	pie_chart 
		.gv_setData()						// DataTable の初期化
		.gv_addColumn('分類')				// 列追加
		.gv_addNumColumn('データ');		// 列追加

	// ***************************************
	// 円グラフ内に DataTable を作成
	// ***************************************
	for( var i = 0; i &lt; testData.length; i++ ) {
		pie_chart 
			.gv_addRow()				// 行追加
			.gv_setCell(0,"分類"+(i+1))		// カラムデータセット
			.gv_setNumCell(1,testData[i]);	// カラムデータセット
	}

	// ***************************************
	// 円グラフ描画
	// ***************************************
	pie_chart.gv_pie({
		width: 500,
		height: 400,
		is3D: true,
		title: '円グラフの表示',
		legend: 'right'
	});

	// ***************************************
	// pie_chart で作成した DataTable
	//  を使ってテーブルを表示する
	// ***************************************
	table_area
		.gv_setData(pie_chart.gv_getData())		// データのセット
		.gv_table({
			width: 300,
			cssClassNames: {
				tableCell: 'myCell',
				headerCell: 'myHeader'
			},
			showRowNumber: true
		});

}

&lt;/script&gt;
&lt;div id="pie_chart_area"&gt;&lt;/div&gt;
&lt;div id="table_area"&gt;&lt;/div&gt;

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code161119181913"); 
</script>
<pre class=w6>


▼ デモ
</pre>
<script src="https://www.gstatic.com/charts/loader.js"></script>

<style>
#table_area .google-visualization-table-table {
	border-collapse: collapse;
}

.myHeader {
	color:#ffffff;
	background: #123456;
	padding: 12px!important
	border: solid #303030 1px;
}
.myCell {
	padding: 12px!important;
	border: solid #303030 1px!important;
}
</style>

<script>
var testData = 
[
	12543,
	326,
	2890,
	1112,
	200,
	8891,
	6333
];

// *********************************************
// jQuery を使用して画面上の
// コンテンツがロードされてから
// google.visualization をロード
// *********************************************
$(function(){
	google.charts.load('current', {'packages':['corechart','table']});
	google.charts.setOnLoadCallback(function(){
		// *********************************************
		// jQuery によるプラグイン化
		// *********************************************
		$.fn.extend({
			gv_getData: function() {
				return $(this).data("DataTable");
			},
			gv_setData: function() {
				if (arguments.length == 1) {
					// 引数がある場合は引数の DataTable をセットする
					$(this).data("DataTable",arguments[0]);
				}
				else {
					// 引数が無い場合は初期化した DataTable をセットする
					$(this).data("DataTable", new google.visualization.DataTable());
				}
				return this;
			},
			gv_addColumn: function(title){
				$(this).data("DataTable").addColumn('string', title);
				return this;
			},
			gv_addNumColumn: function(title){
				$(this).data("DataTable").addColumn('number', title);
				return this;
			},
			gv_addRow: function(){
				$(this).data("CurRow", $(this).data("DataTable").addRow() );
				return this;
			},
			gv_setCell: function(col, data){
				$(this).data("DataTable").setCell($(this).data("CurRow"), col, data+"" );
				return this;
			},
			gv_setNumCell: function(col, data){
				$(this).data("DataTable").setCell($(this).data("CurRow"), col, data );
				return this;
			},
			gv_setRowCell: function(row, col, data){
				$(this).data("DataTable").setCell(row, col, data+"" );
				return this;
			},
			gv_setRowNumCell: function(row, col, data){
				$(this).data("DataTable").setCell(row, col, data );
				return this;
			},
			gv_table: function(options){
				var visualization = new google.visualization.Table($(this).get(0));
				visualization.draw($(this).data("DataTable"), options);
				return this;
			},
			gv_pie: function(options){
				var visualization = new google.visualization.PieChart($(this).get(0));
				visualization.draw($(this).data("DataTable"), options);
				return this;
			}
		});

	
		// *********************************************
		// 初期の実行
		// *********************************************
		drawPieChart()
	});
});

// *********************************************
// visualization のロード完了時に実行
// *********************************************
function drawPieChart() {

	var pie_chart 	= $("#pie_chart_area");
	var table_area = $("#table_area");

	// ***************************************
	// 円グラフ作成
	// ***************************************
	pie_chart 
		.gv_setData()						// DataTable の初期化
		.gv_addColumn('分類')				// 列追加
		.gv_addNumColumn('データ');		// 列追加

	// ***************************************
	// 円グラフ内に DataTable を作成
	// ***************************************
	for( var i = 0; i < testData.length; i++ ) {
		pie_chart 
			.gv_addRow()				// 行追加
			.gv_setCell(0,"分類"+(i+1))		// カラムデータセット
			.gv_setNumCell(1,testData[i]);	// カラムデータセット
	}

	// ***************************************
	// 円グラフ作成
	// ***************************************
	pie_chart.gv_pie({
		width: 500,
		height: 400,
		is3D: true,
		title: '円グラフの表示',
		legend: 'right'
	});

	// ***************************************
	// pie_chart で作成した DataTable
	//  を使ってテーブルを表示する
	// ***************************************
	table_area
		.gv_setData(pie_chart.gv_getData())		// データのセット
		.gv_table({
			width: 300,
			cssClassNames: {
				tableCell: 'myCell',
				headerCell: 'myHeader'
			},
			showRowNumber: true
		});

}

</script>
<div id="pie_chart_area"></div>
<div id="table_area"></div>
<pre class=w6>



</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>JavaScript</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/444135717</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/240480997.html</link>
      <title>Seesaa ブログのエクスポートを呼び出して全てをバックアップするスクリプト</title>
      <pubDate>Fri, 18 Dec 2015 12:14:27 +0900</pubDate>
            <description>2015/12/18 : Google Chrome でダウンロード可能にしました拡張子がスクリプトのままだと、Google Chrome がダウンロードさせてくれないので、 .lightbox としています。その為、【最初に set_script.bat を実行して、拡張子を .wsf に変更するようにしています】2015/02/04 : 再び、正常に動作するように修正しました2013/01/19 : 正常に動作するように修正しましたbk.wsf   &amp;lt;JOB&amp;gt;..</description>
            <itunes:summary><![CDATA[

<a href="http://winofsql.jp/download/seesaa_backup.zip"><img src="http://winofsql.jp/image/lightbox_download.jpg"></a>

2015/12/18 : Google Chrome でダウンロード可能にしました

拡張子がスクリプトのままだと、Google Chrome がダウンロードさせてくれないので、 .lightbox としています。その為、【最初に set_script.bat を実行して、拡張子を .wsf に変更するようにしています】


2015/02/04 : 再び、正常に動作するように修正しました
2013/01/19 : 正常に動作するように修正しました

<b>bk.wsf</b>


 
 
 

&lt;JOB&gt;
&lt;COMMENT&gt;
************************************************************
 EXPORT ( バッチ処理用 )
 Seesaa からブログのバックアップデータを取得する

************************************************************
&lt;/COMMENT&gt;

&lt;OBJECT id="objHTTP" progid="Msxml2.ServerXMLHTTP" /&gt;
&lt;OBJECT id="Stream" progid="ADODB.Stream" /&gt;

&lt;SCRIPT language=VBScript&gt;
' ***********************************************************
' 正規表現用
' ***********************************************************
Set regEx = New RegExp

' ***********************************************************
' タイムアウト用
' ***********************************************************
lResolve = 60 * 1000
lConnect = 60 * 1000
lSend = 60 * 1000
lReceive = 60 * 1000

' ***********************************************************
' 処理開始
' ***********************************************************
bDebug = False
target_year1 = WScript.Arguments(0)
target_month1 = WScript.Arguments(1)
target_year2 = WScript.Arguments(2)
target_month2 = WScript.Arguments(3)

emailData = "メールアドレス"
passData = "パスワード"
' バックアップしたいブログの ID を指定します
blogData = "9999999"

' ログインページの取得
Call objHTTP.Open("GET","https://ssl.seesaa.jp/auth",False)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send()

' ページ全体
strPage = objHTTP.responseText

' 投稿用のキーを取得
regEx.IgnoreCase = True
regEx.Global = True
regEx.Pattern = "authpost""&gt;&lt;input value=""([^""]+)"""
Set Matches = regEx.Execute( strPage )
For Each Match in Matches
	strPostKey = Match.SubMatches(0)
	Exit For
Next


' ***********************************************************
' (1) : POST
' ***********************************************************
' ログイン URL
Call objHTTP.Open("POST","https://ssl.seesaa.jp/auth",False)
' POST 用ヘッダ
Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
strData = ""
strData = strData &amp; "aXt=" &amp; strPostKey
strData = strData &amp; "&amp;email=" &amp; emailData
strData = strData &amp; "&amp;password=" &amp; passData
strData = strData &amp; "&amp;return_to=http%3A%2F%2Fblog.seesaa.jp%2F"
Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
Call objHTTP.Send(strData)

strHeaders = objHTTP.getAllResponseHeaders()
if bDebug then
	Wscript.Echo strHeaders
end if

' ***********************************************************
' (2) : GET
' ***********************************************************
' 対象ブログ URL
Call objHTTP.Open("GET","http://blog.seesaa.jp/cms/home/switch?blog_id="&amp;blogData&amp;"&amp;goto=/cms/article/regist/input" , False)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send()

'Set OutObj = Fs.OpenTextFile( "log.txt", 2, True )
'OutObj.Write objHTTP.responseText
'OutObj.Close

if bDebug then
	Wscript.Echo "開始"
end if

' ***********************************************************
' (3) : GET
' ***********************************************************
' 投稿ページ
Call objHTTP.Open("GET","http://blog.seesaa.jp/cms/tools/mt/export/input" , False)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send()

' 投稿用のキーを取得
strPage = objHTTP.responseText
regEx.Pattern = "enctype=""multipart/form-data""&gt;&lt;input value=""([^""]+)"""
Set Matches = regEx.Execute( strPage )
For Each Match in Matches
	strPostKey = Match.SubMatches(0)
	Exit For
Next

' ***********************************************************
' カテゴリ ID リストの取得 ( 2015/02/04 追加 )
' ***********************************************************
regEx.Pattern = "name=""category_id"" value=""([^""]+)"""
regEx.Global = True
Set Matches = regEx.Execute( strPage )

Wscript.Sleep(2000) ' 2秒間の間を置く

' ***********************************************************
' (3) : Export 用データ準備
' ***********************************************************
boundary = DateDiff("s", "1970/1/1 0:00:00",DateAdd("h",-9,now))
h_boundary = "---------------------------" &amp; boundary


target_year1 = WScript.Arguments(0)
target_month1 = WScript.Arguments(1)
target_year2 = WScript.Arguments(2)
target_month2 = WScript.Arguments(3)

' ソース内テキストデータの表示
str = RegTrim(GetResource("myTextData"))
str = Replace( str, "$B", boundary )
str = Replace( str, "$YEAR1", target_year1 )
str = Replace( str, "$MONTH1", target_month1 )
str = Replace( str, "$YEAR2", target_year2 )
str = Replace( str, "$MONTH2", target_month2 )
str = Replace( str, "$AXT", strPostKey )
if bDebug then
	Wscript.Echo str
end if

' ***********************************************************
' カテゴリ ID リストの設定 ( 2015/02/04 追加 )
' ***********************************************************
bFlg = False

For Each Match in Matches
	if bFlg &lt;&gt; False then
		bFlg = True
	else
		str = str &amp; vbCrLf
	end if
	str = str &amp; "Content-Disposition: form-data; name=""category_id""" &amp; vbCrLf &amp; vbCrLf
	str = str &amp; Match.SubMatches(0) &amp; vbCrLf
	str = str &amp; "-----------------------------" &amp; boundary
Next

str = str &amp; "--" &amp; vCrLf

' ***********************************************************
' (4) : Export 用データ送信
' ***********************************************************
Call objHTTP.Open( "POST","http://blog.seesaa.jp/cms/tools/mt/export/do_export", False )
' POST 用 HTTP ヘッダ
Call objHTTP.setRequestHeader("Content-Type", "multipart/form-data; boundary=" &amp; h_boundary)
' 念のため
Call objHTTP.setRequestHeader("Referer", "http://blog.seesaa.jp/cms/tools/mt/export/input" )
Call objHTTP.SetRequestHeader("Content-Length",Len(str))
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send(str)

Stream.Open
Stream.Type = 1 ' バイナリ
Stream.Write objHTTP.responseBody
Stream.SaveToFile "seesaa_" &amp; blogData &amp; "_" &amp; target_year1 &amp; target_month1 &amp; "_" &amp; target_year2 &amp; target_month2 &amp; ".log", 2
Stream.Close   

Wscript.Echo "処理が終了しました:" &amp; target_year1 &amp; target_month1 &amp; "～" &amp; target_year2 &amp; target_month2

' ***********************************************************
' 文字列前後の漢字スペースを含むホワイトスペースの削除
' ***********************************************************
Function RegTrim( strValue )

	Dim regEx, str

	Set regEx = New RegExp
	regEx.IgnoreCase = True
	regEx.Pattern = "^[　\s]+"
	str = regEx.Replace( strValue, "" )
	regEx.Pattern = "[　\s]+$"
	RegTrim = regEx.Replace( str, "" )

End Function
&lt;/SCRIPT&gt;

&lt;COMMENT&gt;
************************************************************
 ソース内テキストデータ
************************************************************
&lt;/COMMENT&gt;
&lt;RESOURCE id="myTextData"&gt;
&lt;![CDATA[
-----------------------------$B
Content-Disposition: form-data; name="aXt"

$AXT
-----------------------------$B
Content-Disposition: form-data; name="encode"

utf8
-----------------------------$B
Content-Disposition: form-data; name="from_year_month"

$YEAR1-$MONTH1
-----------------------------$B
Content-Disposition: form-data; name="to_year_month"

$YEAR2-$MONTH2
-----------------------------$B
]]&gt;
&lt;/RESOURCE&gt;

&lt;/JOB&gt;







オリジナルのシステムで範囲指定が指定可能なのでエクスポートが便利になっています。

▼ バッチファイル例は以下のようになりました

cscript.exe bk.wsf 2009 04 2010 03

sleep.vbs
cscript.exe bk.wsf 2010 04 2011 03

sleep.vbs
cscript.exe bk.wsf 2011 04 2012 03

sleep.vbs
cscript.exe bk.wsf 2012 04 2013 03


<img src="https://lh5.googleusercontent.com/-J5Hcppigs0I/T4EHJKQfhzI/AAAAAAAAFM8/xx9Bzv70v5M/s600/_img.png" />

<b>バックアップには、ブログの id 番号が必要です</b>

=====================================================================
拡張子がスクリプトのままだと、Google Chrome がダウンロードさせてくれないので、
 .lightbox としています。その為、

【最初に set_script.bat を実行して下さい】
=====================================================================

■ 1) seesaa_backup.bat の中の範囲指定部分を適宜変更して利用して下さい。

例) 2012/4月 ～ 2013/3月
cscript.exe bk.wsf 2012 04 2013 03

   範囲を広くしすぎると、エラーになるおそれがあるので年単位が妥当だと思います


■ 2) bk.wsf の以下の部分を変更して、seesaa.bat を実行して下さい

(行は36～39)
emailData = "メールアドレス"
passData = "パスワード"
' バックアップしたいブログの ID を指定します
blogData = "9999999"


ブログの ID は、http://blog.seesaa.jp/cms/home/index で、該当
するブログの名前のリンク内の URL から取り出します。

例) blog_id の番号
http://blog.seesaa.jp/cms/home/switch?blog_id=9999999&goto=/cms/article/regist/input


■ 著作権その他

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




<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>
<a href="http://winofsql.jp/download/seesaa_backup.zip"><img src="http://winofsql.jp/image/lightbox_download.jpg" style="border: solid 1px #000000"></a>

<strong><span style="color:#CB3265;">2015/12/18 : Google Chrome でダウンロード可能にしました</span></strong>
<pre class="this bd">
拡張子がスクリプトのままだと、Google Chrome がダウンロードさせてくれないので、 .lightbox としています。その為、【最初に set_script.bat を実行して、拡張子を .wsf に変更するようにしています】
</pre>

<strong><span style="color:#CB3265;">2015/02/04 : 再び、正常に動作するように修正しました</span></strong>
<strong><span style="color:#CB3265;"><del>2013/01/19 : 正常に動作するように修正しました</del></span></strong>

<b class=gttl>bk.wsf</b>
</pre>
<div id="sh_56737b09b68b4">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_56737b09b68b4 .syntaxhighlighter div,#sh_56737b09b68b4 .syntaxhighlighter span,#sh_56737b09b68b4 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code151218121833" class="brush:wsf">
&lt;JOB&gt;
&lt;COMMENT&gt;
************************************************************
 EXPORT ( バッチ処理用 )
 Seesaa からブログのバックアップデータを取得する

************************************************************
&lt;/COMMENT&gt;

&lt;OBJECT id="objHTTP" progid="Msxml2.ServerXMLHTTP" /&gt;
&lt;OBJECT id="Stream" progid="ADODB.Stream" /&gt;

&lt;SCRIPT language=VBScript&gt;
' ***********************************************************
' 正規表現用
' ***********************************************************
Set regEx = New RegExp

' ***********************************************************
' タイムアウト用
' ***********************************************************
lResolve = 60 * 1000
lConnect = 60 * 1000
lSend = 60 * 1000
lReceive = 60 * 1000

' ***********************************************************
' 処理開始
' ***********************************************************
bDebug = False
target_year1 = WScript.Arguments(0)
target_month1 = WScript.Arguments(1)
target_year2 = WScript.Arguments(2)
target_month2 = WScript.Arguments(3)

emailData = "メールアドレス"
passData = "パスワード"
' バックアップしたいブログの ID を指定します
blogData = "9999999"

' ログインページの取得
Call objHTTP.Open("GET","https://ssl.seesaa.jp/auth",False)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send()

' ページ全体
strPage = objHTTP.responseText

' 投稿用のキーを取得
regEx.IgnoreCase = True
regEx.Global = True
regEx.Pattern = "authpost""&gt;&lt;input value=""([^""]+)"""
Set Matches = regEx.Execute( strPage )
For Each Match in Matches
	strPostKey = Match.SubMatches(0)
	Exit For
Next


' ***********************************************************
' (1) : POST
' ***********************************************************
' ログイン URL
Call objHTTP.Open("POST","https://ssl.seesaa.jp/auth",False)
' POST 用ヘッダ
Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
strData = ""
strData = strData &amp; "aXt=" &amp; strPostKey
strData = strData &amp; "&amp;email=" &amp; emailData
strData = strData &amp; "&amp;password=" &amp; passData
strData = strData &amp; "&amp;return_to=http%3A%2F%2Fblog.seesaa.jp%2F"
Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
Call objHTTP.Send(strData)

strHeaders = objHTTP.getAllResponseHeaders()
if bDebug then
	Wscript.Echo strHeaders
end if

' ***********************************************************
' (2) : GET
' ***********************************************************
' 対象ブログ URL
Call objHTTP.Open("GET","http://blog.seesaa.jp/cms/home/switch?blog_id="&amp;blogData&amp;"&amp;goto=/cms/article/regist/input" , False)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send()

'Set OutObj = Fs.OpenTextFile( "log.txt", 2, True )
'OutObj.Write objHTTP.responseText
'OutObj.Close

if bDebug then
	Wscript.Echo "開始"
end if

' ***********************************************************
' (3) : GET
' ***********************************************************
' 投稿ページ
Call objHTTP.Open("GET","http://blog.seesaa.jp/cms/tools/mt/export/input" , False)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send()

' 投稿用のキーを取得
strPage = objHTTP.responseText
regEx.Pattern = "enctype=""multipart/form-data""&gt;&lt;input value=""([^""]+)"""
Set Matches = regEx.Execute( strPage )
For Each Match in Matches
	strPostKey = Match.SubMatches(0)
	Exit For
Next

' ***********************************************************
' カテゴリ ID リストの取得 ( 2015/02/04 追加 )
' ***********************************************************
regEx.Pattern = "name=""category_id"" value=""([^""]+)"""
regEx.Global = True
Set Matches = regEx.Execute( strPage )

Wscript.Sleep(2000) ' 2秒間の間を置く

' ***********************************************************
' (3) : Export 用データ準備
' ***********************************************************
boundary = DateDiff("s", "1970/1/1 0:00:00",DateAdd("h",-9,now))
h_boundary = "---------------------------" &amp; boundary


target_year1 = WScript.Arguments(0)
target_month1 = WScript.Arguments(1)
target_year2 = WScript.Arguments(2)
target_month2 = WScript.Arguments(3)

' ソース内テキストデータの表示
str = RegTrim(GetResource("myTextData"))
str = Replace( str, "$B", boundary )
str = Replace( str, "$YEAR1", target_year1 )
str = Replace( str, "$MONTH1", target_month1 )
str = Replace( str, "$YEAR2", target_year2 )
str = Replace( str, "$MONTH2", target_month2 )
str = Replace( str, "$AXT", strPostKey )
if bDebug then
	Wscript.Echo str
end if

' ***********************************************************
' カテゴリ ID リストの設定 ( 2015/02/04 追加 )
' ***********************************************************
bFlg = False

For Each Match in Matches
	if bFlg &lt;&gt; False then
		bFlg = True
	else
		str = str &amp; vbCrLf
	end if
	str = str &amp; "Content-Disposition: form-data; name=""category_id""" &amp; vbCrLf &amp; vbCrLf
	str = str &amp; Match.SubMatches(0) &amp; vbCrLf
	str = str &amp; "-----------------------------" &amp; boundary
Next

str = str &amp; "--" &amp; vCrLf

' ***********************************************************
' (4) : Export 用データ送信
' ***********************************************************
Call objHTTP.Open( "POST","http://blog.seesaa.jp/cms/tools/mt/export/do_export", False )
' POST 用 HTTP ヘッダ
Call objHTTP.setRequestHeader("Content-Type", "multipart/form-data; boundary=" &amp; h_boundary)
' 念のため
Call objHTTP.setRequestHeader("Referer", "http://blog.seesaa.jp/cms/tools/mt/export/input" )
Call objHTTP.SetRequestHeader("Content-Length",Len(str))
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send(str)

Stream.Open
Stream.Type = 1 ' バイナリ
Stream.Write objHTTP.responseBody
Stream.SaveToFile "seesaa_" &amp; blogData &amp; "_" &amp; target_year1 &amp; target_month1 &amp; "_" &amp; target_year2 &amp; target_month2 &amp; ".log", 2
Stream.Close   

Wscript.Echo "処理が終了しました:" &amp; target_year1 &amp; target_month1 &amp; "～" &amp; target_year2 &amp; target_month2

' ***********************************************************
' 文字列前後の漢字スペースを含むホワイトスペースの削除
' ***********************************************************
Function RegTrim( strValue )

	Dim regEx, str

	Set regEx = New RegExp
	regEx.IgnoreCase = True
	regEx.Pattern = "^[　\s]+"
	str = regEx.Replace( strValue, "" )
	regEx.Pattern = "[　\s]+$"
	RegTrim = regEx.Replace( str, "" )

End Function
&lt;/SCRIPT&gt;

&lt;COMMENT&gt;
************************************************************
 ソース内テキストデータ
************************************************************
&lt;/COMMENT&gt;
&lt;RESOURCE id="myTextData"&gt;
&lt;![CDATA[
-----------------------------$B
Content-Disposition: form-data; name="aXt"

$AXT
-----------------------------$B
Content-Disposition: form-data; name="encode"

utf8
-----------------------------$B
Content-Disposition: form-data; name="from_year_month"

$YEAR1-$MONTH1
-----------------------------$B
Content-Disposition: form-data; name="to_year_month"

$YEAR2-$MONTH2
-----------------------------$B
]]&gt;
&lt;/RESOURCE&gt;

&lt;/JOB&gt;

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code151218121833"); 
</script>

<pre class=w6>
<strong><span style="color:#FF0000;">オリジナルのシステムで範囲指定が指定可能なのでエクスポートが便利になっています。</span></strong>

▼ バッチファイル例は以下のようになりました
<pre class="this bd s16">
cscript.exe bk.wsf 2009 04 2010 03

sleep.vbs
cscript.exe bk.wsf 2010 04 2011 03

sleep.vbs
cscript.exe bk.wsf 2011 04 2012 03

sleep.vbs
cscript.exe bk.wsf 2012 04 2013 03
</pre>

<img src="https://lh5.googleusercontent.com/-J5Hcppigs0I/T4EHJKQfhzI/AAAAAAAAFM8/xx9Bzv70v5M/s600/_img.png" style="border: solid 1px #000000" />

<b>バックアップには、ブログの id 番号が必要です</b>

<PRE style="WIDTH: 650px" class=this>=====================================================================
拡張子がスクリプトのままだと、Google Chrome がダウンロードさせてくれないので、
 .lightbox としています。その為、

【最初に set_script.bat を実行して下さい】
=====================================================================

■ 1) seesaa_backup.bat の中の範囲指定部分を適宜変更して利用して下さい。

例) 2012/4月 ～ 2013/3月
cscript.exe bk.wsf 2012 04 2013 03

   範囲を広くしすぎると、エラーになるおそれがあるので年単位が妥当だと思います


■ 2) bk.wsf の以下の部分を変更して、seesaa.bat を実行して下さい

(行は36～39)
emailData = "メールアドレス"
passData = "パスワード"
' バックアップしたいブログの ID を指定します
blogData = "9999999"


ブログの ID は、http://blog.seesaa.jp/cms/home/index で、該当
するブログの名前のリンク内の URL から取り出します。

例) blog_id の番号
http://blog.seesaa.jp/cms/home/switch?blog_id=9999999&goto=/cms/article/regist/input


■ 著作権その他

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



</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>Seesaa</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/240480997</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/429939672.html</link>
      <title>【改造】雪を降らす snowstorm.js に 風向きを外部から設定できるオプションを追加しました</title>
      <pubDate>Fri, 20 Nov 2015 00:10:13 +0900</pubDate>
            <description>Snowstorm: A JavaScript Snow Effect for HTML元々は、ランダムで風向きを算出して、マウスの動きで変化するようになっていますが、マウスの動きに反応しないようにするオプションはあるのですが(snowStorm.followMouse = false;)、風向きはそれこそ風任せなので、外部のプロパティから変更するようにしました。snowStorm.vWindX = 横の強度( マイナス可 );snowStorm.vWindY = 縦の強度;..</description>
            <itunes:summary><![CDATA[

<a href="http://www.schillmania.com/projects/snowstorm/" target="_blank">Snowstorm: A JavaScript Snow Effect for HTML</a>

元々は、ランダムで風向きを算出して、マウスの動きで変化するようになっていますが、マウスの動きに反応しないようにするオプションはあるのですが(snowStorm.followMouse = false;)、風向きはそれこそ風任せなので、外部のプロパティから変更するようにしました。

snowStorm.vWindX = 横の強度( マイナス可 );
snowStorm.vWindY = 縦の強度;


<a href="http://dean.edwards.name/packer/" target="_blank">JavaScript の圧縮はこちら</a>

その他の一般的な内容の記事は以下です。

<a href="http://logicalerror.seesaa.net/article/429776674.html" target="_blank">クリスマスに備えて、『雪を降らす snowstorm.js』のカスタマイズ / ダウンロードも何も必要ありません。jQuery も必要ありません</a>

<a href="http://ginpro.winofsql.jp/article/429923664.html" target="_blank">雪を降らす snowstorm.js の 特定 DIV 内での実装</a>









<img src="https://lh3.googleusercontent.com/-om6S8qEPmiQ/VZetF28tQnI/AAAAAAAAbPc/x1aQ7Uj2QVU/s500-Ic42/143594651057721985634.jpg">







▼ 以下、改造コード


 
 
 

/** @license
 * DHTML Snowstorm! JavaScript-based snow for web pages
 * Making it snow on the internets since 2003. You're welcome.
 * -----------------------------------------------------------
 * Version 1.44.20131208 (Previous rev: 1.44.20131125)
 * Copyright (c) 2007, Scott Schiller. All rights reserved.
 * Code provided under the BSD License
 * http://schillmania.com/projects/snowstorm/license.txt
 */

/*jslint nomen: true, plusplus: true, sloppy: true, vars: true, white: true */
/*global window, document, navigator, clearInterval, setInterval */

var snowStorm = (function(window, document) {

  // --- common properties ---

  this.autoStart = true;          // Whether the snow should start automatically or not.
  this.excludeMobile = true;      // Snow is likely to be bad news for mobile phones' CPUs (and batteries.) Enable at your own risk.
  this.flakesMax = 128;           // Limit total amount of snow made (falling + sticking)
  this.flakesMaxActive = 64;      // Limit amount of snow falling at once (less = lower CPU use)
  this.animationInterval = 33;    // Theoretical "miliseconds per frame" measurement. 20 = fast + smooth, but high CPU use. 50 = more conservative, but slower
  this.useGPU = true;             // Enable transform-based hardware acceleration, reduce CPU load.
  this.className = null;          // CSS class name for further customization on snow elements
  this.excludeMobile = true;      // Snow is likely to be bad news for mobile phones' CPUs (and batteries.) By default, be nice.
  this.flakeBottom = null;        // Integer for Y axis snow limit, 0 or null for "full-screen" snow effect
  this.followMouse = true;        // Snow movement can respond to the user's mouse
  this.snowColor = '#fff';        // Don't eat (or use?) yellow snow.
  this.snowCharacter = '&amp;bull;';  // &amp;bull; = bullet, &amp;middot; is square on some systems etc.
  this.snowStick = true;          // Whether or not snow should "stick" at the bottom. When off, will never collect.
  this.targetElement = null;      // element which snow will be appended to (null = document.body) - can be an element ID eg. 'myDiv', or a DOM node reference
  this.useMeltEffect = true;      // When recycling fallen snow (or rarely, when falling), have it "melt" and fade out if browser supports it
  this.useTwinkleEffect = false;  // Allow snow to randomly "flicker" in and out of view while falling
  this.usePositionFixed = false;  // true = snow does not shift vertically when scrolling. May increase CPU load, disabled by default - if enabled, used only where supported
  this.usePixelPosition = false;  // Whether to use pixel values for snow top/left vs. percentages. Auto-enabled if body is position:relative or targetElement is specified.

  // --- less-used bits ---

  this.freezeOnBlur = true;       // Only snow when the window is in focus (foreground.) Saves CPU.
  this.flakeLeftOffset = 0;       // Left margin/gutter space on edge of container (eg. browser window.) Bump up these values if seeing horizontal scrollbars.
  this.flakeRightOffset = 0;      // Right margin/gutter space on edge of container
  this.flakeWidth = 8;            // Max pixel width reserved for snow element
  this.flakeHeight = 8;           // Max pixel height reserved for snow element
  this.vMaxX = 5;                 // Maximum X velocity range for snow
  this.vMaxY = 4;                 // Maximum Y velocity range for snow
  this.zIndex = 0;                // CSS stacking order applied to each snowflake

  // 2015-11-19 lightbox
  this.vWindX = 2;                // 
  this.vWindY = 2;                // 

  // --- "No user-serviceable parts inside" past this point, yadda yadda ---

  var storm = this,
  features,
  // UA sniffing and backCompat rendering mode checks for fixed position, etc.
  isIE = navigator.userAgent.match(/msie/i),
  isIE6 = navigator.userAgent.match(/msie 6/i),
  isMobile = navigator.userAgent.match(/mobile|opera m(ob|in)/i),
  isBackCompatIE = (isIE &amp;&amp; document.compatMode === 'BackCompat'),
  noFixed = (isBackCompatIE || isIE6),
  screenX = null, screenX2 = null, screenY = null, scrollY = null, docHeight = null, vRndX = null, vRndY = null,
  windOffset = 1,
  windMultiplier = 2,
  flakeTypes = 6,
  fixedForEverything = false,
  targetElementIsRelative = false,
  opacitySupported = (function(){
    try {
      document.createElement('div').style.opacity = '0.5';
    } catch(e) {
      return false;
    }
    return true;
  }()),
  didInit = false,
  docFrag = document.createDocumentFragment();

  features = (function() {

    var getAnimationFrame;

    /**
     * hat tip: paul irish
     * http://paulirish.com/2011/requestanimationframe-for-smart-animating/
     * https://gist.github.com/838785
     */

    function timeoutShim(callback) {
      window.setTimeout(callback, 1000/(storm.animationInterval || 20));
    }

    var _animationFrame = (window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        window.msRequestAnimationFrame ||
        timeoutShim);

    // apply to window, avoid "illegal invocation" errors in Chrome
    getAnimationFrame = _animationFrame ? function() {
      return _animationFrame.apply(window, arguments);
    } : null;

    var testDiv;

    testDiv = document.createElement('div');

    function has(prop) {

      // test for feature support
      var result = testDiv.style[prop];
      return (result !== undefined ? prop : null);

    }

    // note local scope.
    var localFeatures = {

      transform: {
        ie:  has('-ms-transform'),
        moz: has('MozTransform'),
        opera: has('OTransform'),
        webkit: has('webkitTransform'),
        w3: has('transform'),
        prop: null // the normalized property value
      },

      getAnimationFrame: getAnimationFrame

    };

    localFeatures.transform.prop = (
      localFeatures.transform.w3 || 
      localFeatures.transform.moz ||
      localFeatures.transform.webkit ||
      localFeatures.transform.ie ||
      localFeatures.transform.opera
    );

    testDiv = null;

    return localFeatures;

  }());

  this.timer = null;
  this.flakes = [];
  this.disabled = false;
  this.active = false;
  this.meltFrameCount = 20;
  this.meltFrames = [];

  this.setXY = function(o, x, y) {

    if (!o) {
      return false;
    }

    if (storm.usePixelPosition || targetElementIsRelative) {

      o.style.left = (x - storm.flakeWidth) + 'px';
      o.style.top = (y - storm.flakeHeight) + 'px';

    } else if (noFixed) {

      o.style.right = (100-(x/screenX*100)) + '%';
      // avoid creating vertical scrollbars
      o.style.top = (Math.min(y, docHeight-storm.flakeHeight)) + 'px';

    } else {

      if (!storm.flakeBottom) {

        // if not using a fixed bottom coordinate...
        o.style.right = (100-(x/screenX*100)) + '%';
        o.style.bottom = (100-(y/screenY*100)) + '%';

      } else {

        // absolute top.
        o.style.right = (100-(x/screenX*100)) + '%';
        o.style.top = (Math.min(y, docHeight-storm.flakeHeight)) + 'px';

      }

    }

  };

  this.events = (function() {

    var old = (!window.addEventListener &amp;&amp; window.attachEvent), slice = Array.prototype.slice,
    evt = {
      add: (old?'attachEvent':'addEventListener'),
      remove: (old?'detachEvent':'removeEventListener')
    };

    function getArgs(oArgs) {
      var args = slice.call(oArgs), len = args.length;
      if (old) {
        args[1] = 'on' + args[1]; // prefix
        if (len &gt; 3) {
          args.pop(); // no capture
        }
      } else if (len === 3) {
        args.push(false);
      }
      return args;
    }

    function apply(args, sType) {
      var element = args.shift(),
          method = [evt[sType]];
      if (old) {
        element[method](args[0], args[1]);
      } else {
        element[method].apply(element, args);
      }
    }

    function addEvent() {
      apply(getArgs(arguments), 'add');
    }

    function removeEvent() {
      apply(getArgs(arguments), 'remove');
    }

    return {
      add: addEvent,
      remove: removeEvent
    };

  }());

  function rnd(n,min) {
    if (isNaN(min)) {
      min = 0;
    }
    return (Math.random()*n)+min;
  }

  function plusMinus(n) {
    return (parseInt(rnd(2),10)===1?n*-1:n);
  }

  this.randomizeWind = function() {
    var i;
// 2015-11-19 lightbox
//    vRndX = plusMinus(rnd(storm.vMaxX,0.2));
//    vRndY = rnd(storm.vMaxY,0.2);
    if (this.flakes) {
      for (i=0; i&lt;this.flakes.length; i++) {
        if (this.flakes[i].active) {
          this.flakes[i].setVelocities();
        }
      }
    }
  };

  this.scrollHandler = function() {
    var i;
    // "attach" snowflakes to bottom of window if no absolute bottom value was given
    scrollY = (storm.flakeBottom ? 0 : parseInt(window.scrollY || document.documentElement.scrollTop || (noFixed ? document.body.scrollTop : 0), 10));
    if (isNaN(scrollY)) {
      scrollY = 0; // Netscape 6 scroll fix
    }
    if (!fixedForEverything &amp;&amp; !storm.flakeBottom &amp;&amp; storm.flakes) {
      for (i=0; i&lt;storm.flakes.length; i++) {
        if (storm.flakes[i].active === 0) {
          storm.flakes[i].stick();
        }
      }
    }
  };

  this.resizeHandler = function() {
    if (window.innerWidth || window.innerHeight) {
      screenX = window.innerWidth - 16 - storm.flakeRightOffset;
      screenY = (storm.flakeBottom || window.innerHeight);
    } else {
      screenX = (document.documentElement.clientWidth || document.body.clientWidth || document.body.scrollWidth) - (!isIE ? 8 : 0) - storm.flakeRightOffset;
      screenY = storm.flakeBottom || document.documentElement.clientHeight || document.body.clientHeight || document.body.scrollHeight;
    }
    docHeight = document.body.offsetHeight;
    screenX2 = parseInt(screenX/2,10);
  };

  this.resizeHandlerAlt = function() {
    screenX = storm.targetElement.offsetWidth - storm.flakeRightOffset;
    screenY = storm.flakeBottom || storm.targetElement.offsetHeight;
    screenX2 = parseInt(screenX/2,10);
    docHeight = document.body.offsetHeight;
  };

  this.freeze = function() {
    // pause animation
    if (!storm.disabled) {
      storm.disabled = 1;
    } else {
      return false;
    }
    storm.timer = null;
  };

  this.resume = function() {
    if (storm.disabled) {
       storm.disabled = 0;
    } else {
      return false;
    }
    storm.timerInit();
  };

  this.toggleSnow = function() {
    if (!storm.flakes.length) {
      // first run
      storm.start();
    } else {
      storm.active = !storm.active;
      if (storm.active) {
        storm.show();
        storm.resume();
      } else {
        storm.stop();
        storm.freeze();
      }
    }
  };

  this.stop = function() {
    var i;
    this.freeze();
    for (i=0; i&lt;this.flakes.length; i++) {
      this.flakes[i].o.style.display = 'none';
    }
    storm.events.remove(window,'scroll',storm.scrollHandler);
    storm.events.remove(window,'resize',storm.resizeHandler);
    if (storm.freezeOnBlur) {
      if (isIE) {
        storm.events.remove(document,'focusout',storm.freeze);
        storm.events.remove(document,'focusin',storm.resume);
      } else {
        storm.events.remove(window,'blur',storm.freeze);
        storm.events.remove(window,'focus',storm.resume);
      }
    }
  };

  this.show = function() {
    var i;
    for (i=0; i&lt;this.flakes.length; i++) {
      this.flakes[i].o.style.display = 'block';
    }
  };

  this.SnowFlake = function(type,x,y) {
    var s = this;
    this.type = type;
    this.x = x||parseInt(rnd(screenX-20),10);
    this.y = (!isNaN(y)?y:-rnd(screenY)-12);
    this.vX = null;
    this.vY = null;
    this.vAmpTypes = [1,1.2,1.4,1.6,1.8]; // "amplification" for vX/vY (based on flake size/type)
    this.vAmp = this.vAmpTypes[this.type] || 1;
    this.melting = false;
    this.meltFrameCount = storm.meltFrameCount;
    this.meltFrames = storm.meltFrames;
    this.meltFrame = 0;
    this.twinkleFrame = 0;
    this.active = 1;
    this.fontSize = (10+(this.type/5)*10);
    this.o = document.createElement('div');
    this.o.innerHTML = storm.snowCharacter;
    if (storm.className) {
      this.o.setAttribute('class', storm.className);
    }
    this.o.style.color = storm.snowColor;
    this.o.style.position = (fixedForEverything?'fixed':'absolute');
    if (storm.useGPU &amp;&amp; features.transform.prop) {
      // GPU-accelerated snow.
      this.o.style[features.transform.prop] = 'translate3d(0px, 0px, 0px)';
    }
    this.o.style.width = storm.flakeWidth+'px';
    this.o.style.height = storm.flakeHeight+'px';
    this.o.style.fontFamily = 'arial,verdana';
    this.o.style.cursor = 'default';
    this.o.style.overflow = 'hidden';
    this.o.style.fontWeight = 'normal';
    this.o.style.zIndex = storm.zIndex;
    docFrag.appendChild(this.o);

    this.refresh = function() {
      if (isNaN(s.x) || isNaN(s.y)) {
        // safety check
        return false;
      }
      storm.setXY(s.o, s.x, s.y);
    };

    this.stick = function() {
      if (noFixed || (storm.targetElement !== document.documentElement &amp;&amp; storm.targetElement !== document.body)) {
        s.o.style.top = (screenY+scrollY-storm.flakeHeight)+'px';
      } else if (storm.flakeBottom) {
        s.o.style.top = storm.flakeBottom+'px';
      } else {
        s.o.style.display = 'none';
        s.o.style.bottom = '0%';
        s.o.style.position = 'fixed';
        s.o.style.display = 'block';
      }
    };

    this.vCheck = function() {
      if (s.vX&gt;=0 &amp;&amp; s.vX&lt;0.2) {
        s.vX = 0.2;
      } else if (s.vX&lt;0 &amp;&amp; s.vX&gt;-0.2) {
        s.vX = -0.2;
      }
      if (s.vY&gt;=0 &amp;&amp; s.vY&lt;0.2) {
        s.vY = 0.2;
      }
    };

    this.move = function() {
      var vX = s.vX*windOffset, yDiff;
      s.x += vX;
      s.y += (s.vY*s.vAmp);
      if (s.x &gt;= screenX || screenX-s.x &lt; storm.flakeWidth) { // X-axis scroll check
        s.x = 0;
      } else if (vX &lt; 0 &amp;&amp; s.x-storm.flakeLeftOffset &lt; -storm.flakeWidth) {
        s.x = screenX-storm.flakeWidth-1; // flakeWidth;
      }
      s.refresh();
      yDiff = screenY+scrollY-s.y+storm.flakeHeight;
      if (yDiff&lt;storm.flakeHeight) {
        s.active = 0;
        if (storm.snowStick) {
          s.stick();
        } else {
          s.recycle();
        }
      } else {
        if (storm.useMeltEffect &amp;&amp; s.active &amp;&amp; s.type &lt; 3 &amp;&amp; !s.melting &amp;&amp; Math.random()&gt;0.998) {
          // ~1/1000 chance of melting mid-air, with each frame
          s.melting = true;
          s.melt();
          // only incrementally melt one frame
          // s.melting = false;
        }
        if (storm.useTwinkleEffect) {
          if (s.twinkleFrame &lt; 0) {
            if (Math.random() &gt; 0.97) {
              s.twinkleFrame = parseInt(Math.random() * 8, 10);
            }
          } else {
            s.twinkleFrame--;
            if (!opacitySupported) {
              s.o.style.visibility = (s.twinkleFrame &amp;&amp; s.twinkleFrame % 2 === 0 ? 'hidden' : 'visible');
            } else {
              s.o.style.opacity = (s.twinkleFrame &amp;&amp; s.twinkleFrame % 2 === 0 ? 0 : 1);
            }
          }
        }
      }
    };

    this.animate = function() {
      // main animation loop
      // move, check status, die etc.
      s.move();
    };

    this.setVelocities = function() {
// 2015-11-19 lightbox : vRndX &gt; storm.vRndX,vRndY &gt; storm.vRndY
      s.vX = storm.vWindX+rnd(storm.vMaxX*0.12,0.1);
      s.vY = storm.vWindY+rnd(storm.vMaxY*0.12,0.1);
    };

    this.setOpacity = function(o,opacity) {
      if (!opacitySupported) {
        return false;
      }
      o.style.opacity = opacity;
    };

    this.melt = function() {
      if (!storm.useMeltEffect || !s.melting) {
        s.recycle();
      } else {
        if (s.meltFrame &lt; s.meltFrameCount) {
          s.setOpacity(s.o,s.meltFrames[s.meltFrame]);
          s.o.style.fontSize = s.fontSize-(s.fontSize*(s.meltFrame/s.meltFrameCount))+'px';
          s.o.style.lineHeight = storm.flakeHeight+2+(storm.flakeHeight*0.75*(s.meltFrame/s.meltFrameCount))+'px';
          s.meltFrame++;
        } else {
          s.recycle();
        }
      }
    };

    this.recycle = function() {
      s.o.style.display = 'none';
      s.o.style.position = (fixedForEverything?'fixed':'absolute');
      s.o.style.bottom = 'auto';
      s.setVelocities();
      s.vCheck();
      s.meltFrame = 0;
      s.melting = false;
      s.setOpacity(s.o,1);
      s.o.style.padding = '0px';
      s.o.style.margin = '0px';
      s.o.style.fontSize = s.fontSize+'px';
      s.o.style.lineHeight = (storm.flakeHeight+2)+'px';
      s.o.style.textAlign = 'center';
      s.o.style.verticalAlign = 'baseline';
      s.x = parseInt(rnd(screenX-storm.flakeWidth-20),10);
      s.y = parseInt(rnd(screenY)*-1,10)-storm.flakeHeight;
      s.refresh();
      s.o.style.display = 'block';
      s.active = 1;
    };

    this.recycle(); // set up x/y coords etc.
    this.refresh();

  };

  this.snow = function() {
    var active = 0, flake = null, i, j;
    for (i=0, j=storm.flakes.length; i&lt;j; i++) {
      if (storm.flakes[i].active === 1) {
        storm.flakes[i].move();
        active++;
      }
      if (storm.flakes[i].melting) {
        storm.flakes[i].melt();
      }
    }
    if (active&lt;storm.flakesMaxActive) {
      flake = storm.flakes[parseInt(rnd(storm.flakes.length),10)];
      if (flake.active === 0) {
        flake.melting = true;
      }
    }
    if (storm.timer) {
      features.getAnimationFrame(storm.snow);
    }
  };

  this.mouseMove = function(e) {
    if (!storm.followMouse) {
      return true;
    }
    var x = parseInt(e.clientX,10);
    if (x&lt;screenX2) {
      windOffset = -windMultiplier+(x/screenX2*windMultiplier);
    } else {
      x -= screenX2;
      windOffset = (x/screenX2)*windMultiplier;
    }
  };

  this.createSnow = function(limit,allowInactive) {
    var i;
    for (i=0; i&lt;limit; i++) {
      storm.flakes[storm.flakes.length] = new storm.SnowFlake(parseInt(rnd(flakeTypes),10));
      if (allowInactive || i&gt;storm.flakesMaxActive) {
        storm.flakes[storm.flakes.length-1].active = -1;
      }
    }
    storm.targetElement.appendChild(docFrag);
  };

  this.timerInit = function() {
    storm.timer = true;
    storm.snow();
  };

  this.init = function() {
    var i;
    for (i=0; i&lt;storm.meltFrameCount; i++) {
      storm.meltFrames.push(1-(i/storm.meltFrameCount));
    }
    storm.randomizeWind();
    storm.createSnow(storm.flakesMax); // create initial batch
    storm.events.add(window,'resize',storm.resizeHandler);
    storm.events.add(window,'scroll',storm.scrollHandler);
    if (storm.freezeOnBlur) {
      if (isIE) {
        storm.events.add(document,'focusout',storm.freeze);
        storm.events.add(document,'focusin',storm.resume);
      } else {
        storm.events.add(window,'blur',storm.freeze);
        storm.events.add(window,'focus',storm.resume);
      }
    }
    storm.resizeHandler();
    storm.scrollHandler();
    if (storm.followMouse) {
      storm.events.add(isIE?document:window,'mousemove',storm.mouseMove);
    }
    storm.animationInterval = Math.max(20,storm.animationInterval);
    storm.timerInit();
  };

  this.start = function(bFromOnLoad) {
    if (!didInit) {
      didInit = true;
    } else if (bFromOnLoad) {
      // already loaded and running
      return true;
    }
    if (typeof storm.targetElement === 'string') {
      var targetID = storm.targetElement;
      storm.targetElement = document.getElementById(targetID);
      if (!storm.targetElement) {
        throw new Error('Snowstorm: Unable to get targetElement "'+targetID+'"');
      }
    }
    if (!storm.targetElement) {
      storm.targetElement = (document.body || document.documentElement);
    }
    if (storm.targetElement !== document.documentElement &amp;&amp; storm.targetElement !== document.body) {
      // re-map handler to get element instead of screen dimensions
      storm.resizeHandler = storm.resizeHandlerAlt;
      //and force-enable pixel positioning
      storm.usePixelPosition = true;
    }
    storm.resizeHandler(); // get bounding box elements
    storm.usePositionFixed = (storm.usePositionFixed &amp;&amp; !noFixed &amp;&amp; !storm.flakeBottom); // whether or not position:fixed is to be used
    if (window.getComputedStyle) {
      // attempt to determine if body or user-specified snow parent element is relatlively-positioned.
      try {
        targetElementIsRelative = (window.getComputedStyle(storm.targetElement, null).getPropertyValue('position') === 'relative');
      } catch(e) {
        // oh well
        targetElementIsRelative = false;
      }
    }
    fixedForEverything = storm.usePositionFixed;
    if (screenX &amp;&amp; screenY &amp;&amp; !storm.disabled) {
      storm.init();
      storm.active = true;
    }
  };

  function doDelayedStart() {
    window.setTimeout(function() {
      storm.start(true);
    }, 20);
    // event cleanup
    storm.events.remove(isIE?document:window,'mousemove',doDelayedStart);
  }

  function doStart() {
    if (!storm.excludeMobile || !isMobile) {
      doDelayedStart();
    }
    // event cleanup
    storm.events.remove(window, 'load', doStart);
  }

  // hooks for starting the snow
  if (storm.autoStart) {
    storm.events.add(window, 'load', doStart, false);
  }

  return this;

}(window, document));










<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>
<a href="http://www.schillmania.com/projects/snowstorm/" target="_blank">Snowstorm: A JavaScript Snow Effect for HTML</a>

元々は、ランダムで風向きを算出して、マウスの動きで変化するようになっていますが、マウスの動きに反応しないようにするオプションはあるのですが(snowStorm.followMouse = false;)、風向きはそれこそ風任せなので、外部のプロパティから変更するようにしました。

<strong>snowStorm.vWindX = 横の強度( マイナス可 );
snowStorm.vWindY = 縦の強度;
</strong>

<a href="http://dean.edwards.name/packer/" target="_blank">JavaScript の圧縮はこちら</a>

その他の一般的な内容の記事は以下です。

<a href="http://logicalerror.seesaa.net/article/429776674.html" target="_blank">クリスマスに備えて、『雪を降らす snowstorm.js』のカスタマイズ / ダウンロードも何も必要ありません。jQuery も必要ありません</a>

<a href="http://ginpro.winofsql.jp/article/429923664.html" target="_blank">雪を降らす snowstorm.js の 特定 DIV 内での実装</a>

</pre>
<style>
@-webkit-keyframes snow-rotate {
  0% { -webkit-transform: rotate(0deg); }
  100% { -webkit-transform: rotate(360deg); }
}
@-moz-keyframes snow-rotate {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
@-o-keyframes snow-rotate {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
@keyframes snow-rotate {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
.mysnow {
	color:#e0e0e0!important;
	-webkit-animation: 1.85s snow-rotate steps(8) infinite;
	-moz-animation: 1.85s snow-rotate steps(8) infinite;
	-o-animation: 1.85s snow-rotate steps(8) infinite;
	animation: 1.85s snow-rotate steps(8) infinite;

}
</style>
<script src="http://winofsql.jp/if_skeleton/ot/snowstorm-min.js"></script>
<input type="button" value="x = -5" onclick='snowStorm.vWindX = -5;'>
<input type="button" value="x = 0" onclick='snowStorm.vWindX = 0;'>
<input type="button" value="x = 10" onclick='snowStorm.vWindX = 10;'>
<div style="width:500px;overflow:hidden; margin:60px auto">
<div id="snow_container" style="width:540px;overflow:hidden;position:relative;">
<img src="https://lh3.googleusercontent.com/-om6S8qEPmiQ/VZetF28tQnI/AAAAAAAAbPc/x1aQ7Uj2QVU/s500-Ic42/143594651057721985634.jpg">
</div>


</div>
<script>
snowStorm.excludeMobile = false;
snowStorm.animationInterval = 50;
snowStorm.flakesMax = 64;
snowStorm.className = "mysnow"
snowStorm.flakeWidth = 16;
snowStorm.flakeHeight = 16;
snowStorm.snowCharacter = '&#10052;';
snowStorm.targetElement = 'snow_container';
snowStorm.followMouse = false;
snowStorm.flakeBottom = 500;

snowStorm.vWindX = 5;
snowStorm.vWindY = 4;
</script>
<pre class=w6>

▼ 以下、改造コード
</pre>
<div id="sh_564de62eb58fa">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_564de62eb58fa .syntaxhighlighter div,#sh_564de62eb58fa .syntaxhighlighter span,#sh_564de62eb58fa .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code151120000934" class="brush:js;highlight: [49,50,251,252,477,478]">
/** @license
 * DHTML Snowstorm! JavaScript-based snow for web pages
 * Making it snow on the internets since 2003. You're welcome.
 * -----------------------------------------------------------
 * Version 1.44.20131208 (Previous rev: 1.44.20131125)
 * Copyright (c) 2007, Scott Schiller. All rights reserved.
 * Code provided under the BSD License
 * http://schillmania.com/projects/snowstorm/license.txt
 */

/*jslint nomen: true, plusplus: true, sloppy: true, vars: true, white: true */
/*global window, document, navigator, clearInterval, setInterval */

var snowStorm = (function(window, document) {

  // --- common properties ---

  this.autoStart = true;          // Whether the snow should start automatically or not.
  this.excludeMobile = true;      // Snow is likely to be bad news for mobile phones' CPUs (and batteries.) Enable at your own risk.
  this.flakesMax = 128;           // Limit total amount of snow made (falling + sticking)
  this.flakesMaxActive = 64;      // Limit amount of snow falling at once (less = lower CPU use)
  this.animationInterval = 33;    // Theoretical "miliseconds per frame" measurement. 20 = fast + smooth, but high CPU use. 50 = more conservative, but slower
  this.useGPU = true;             // Enable transform-based hardware acceleration, reduce CPU load.
  this.className = null;          // CSS class name for further customization on snow elements
  this.excludeMobile = true;      // Snow is likely to be bad news for mobile phones' CPUs (and batteries.) By default, be nice.
  this.flakeBottom = null;        // Integer for Y axis snow limit, 0 or null for "full-screen" snow effect
  this.followMouse = true;        // Snow movement can respond to the user's mouse
  this.snowColor = '#fff';        // Don't eat (or use?) yellow snow.
  this.snowCharacter = '&amp;bull;';  // &amp;bull; = bullet, &amp;middot; is square on some systems etc.
  this.snowStick = true;          // Whether or not snow should "stick" at the bottom. When off, will never collect.
  this.targetElement = null;      // element which snow will be appended to (null = document.body) - can be an element ID eg. 'myDiv', or a DOM node reference
  this.useMeltEffect = true;      // When recycling fallen snow (or rarely, when falling), have it "melt" and fade out if browser supports it
  this.useTwinkleEffect = false;  // Allow snow to randomly "flicker" in and out of view while falling
  this.usePositionFixed = false;  // true = snow does not shift vertically when scrolling. May increase CPU load, disabled by default - if enabled, used only where supported
  this.usePixelPosition = false;  // Whether to use pixel values for snow top/left vs. percentages. Auto-enabled if body is position:relative or targetElement is specified.

  // --- less-used bits ---

  this.freezeOnBlur = true;       // Only snow when the window is in focus (foreground.) Saves CPU.
  this.flakeLeftOffset = 0;       // Left margin/gutter space on edge of container (eg. browser window.) Bump up these values if seeing horizontal scrollbars.
  this.flakeRightOffset = 0;      // Right margin/gutter space on edge of container
  this.flakeWidth = 8;            // Max pixel width reserved for snow element
  this.flakeHeight = 8;           // Max pixel height reserved for snow element
  this.vMaxX = 5;                 // Maximum X velocity range for snow
  this.vMaxY = 4;                 // Maximum Y velocity range for snow
  this.zIndex = 0;                // CSS stacking order applied to each snowflake

  // 2015-11-19 lightbox
  this.vWindX = 2;                // 
  this.vWindY = 2;                // 

  // --- "No user-serviceable parts inside" past this point, yadda yadda ---

  var storm = this,
  features,
  // UA sniffing and backCompat rendering mode checks for fixed position, etc.
  isIE = navigator.userAgent.match(/msie/i),
  isIE6 = navigator.userAgent.match(/msie 6/i),
  isMobile = navigator.userAgent.match(/mobile|opera m(ob|in)/i),
  isBackCompatIE = (isIE &amp;&amp; document.compatMode === 'BackCompat'),
  noFixed = (isBackCompatIE || isIE6),
  screenX = null, screenX2 = null, screenY = null, scrollY = null, docHeight = null, vRndX = null, vRndY = null,
  windOffset = 1,
  windMultiplier = 2,
  flakeTypes = 6,
  fixedForEverything = false,
  targetElementIsRelative = false,
  opacitySupported = (function(){
    try {
      document.createElement('div').style.opacity = '0.5';
    } catch(e) {
      return false;
    }
    return true;
  }()),
  didInit = false,
  docFrag = document.createDocumentFragment();

  features = (function() {

    var getAnimationFrame;

    /**
     * hat tip: paul irish
     * http://paulirish.com/2011/requestanimationframe-for-smart-animating/
     * https://gist.github.com/838785
     */

    function timeoutShim(callback) {
      window.setTimeout(callback, 1000/(storm.animationInterval || 20));
    }

    var _animationFrame = (window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        window.msRequestAnimationFrame ||
        timeoutShim);

    // apply to window, avoid "illegal invocation" errors in Chrome
    getAnimationFrame = _animationFrame ? function() {
      return _animationFrame.apply(window, arguments);
    } : null;

    var testDiv;

    testDiv = document.createElement('div');

    function has(prop) {

      // test for feature support
      var result = testDiv.style[prop];
      return (result !== undefined ? prop : null);

    }

    // note local scope.
    var localFeatures = {

      transform: {
        ie:  has('-ms-transform'),
        moz: has('MozTransform'),
        opera: has('OTransform'),
        webkit: has('webkitTransform'),
        w3: has('transform'),
        prop: null // the normalized property value
      },

      getAnimationFrame: getAnimationFrame

    };

    localFeatures.transform.prop = (
      localFeatures.transform.w3 || 
      localFeatures.transform.moz ||
      localFeatures.transform.webkit ||
      localFeatures.transform.ie ||
      localFeatures.transform.opera
    );

    testDiv = null;

    return localFeatures;

  }());

  this.timer = null;
  this.flakes = [];
  this.disabled = false;
  this.active = false;
  this.meltFrameCount = 20;
  this.meltFrames = [];

  this.setXY = function(o, x, y) {

    if (!o) {
      return false;
    }

    if (storm.usePixelPosition || targetElementIsRelative) {

      o.style.left = (x - storm.flakeWidth) + 'px';
      o.style.top = (y - storm.flakeHeight) + 'px';

    } else if (noFixed) {

      o.style.right = (100-(x/screenX*100)) + '%';
      // avoid creating vertical scrollbars
      o.style.top = (Math.min(y, docHeight-storm.flakeHeight)) + 'px';

    } else {

      if (!storm.flakeBottom) {

        // if not using a fixed bottom coordinate...
        o.style.right = (100-(x/screenX*100)) + '%';
        o.style.bottom = (100-(y/screenY*100)) + '%';

      } else {

        // absolute top.
        o.style.right = (100-(x/screenX*100)) + '%';
        o.style.top = (Math.min(y, docHeight-storm.flakeHeight)) + 'px';

      }

    }

  };

  this.events = (function() {

    var old = (!window.addEventListener &amp;&amp; window.attachEvent), slice = Array.prototype.slice,
    evt = {
      add: (old?'attachEvent':'addEventListener'),
      remove: (old?'detachEvent':'removeEventListener')
    };

    function getArgs(oArgs) {
      var args = slice.call(oArgs), len = args.length;
      if (old) {
        args[1] = 'on' + args[1]; // prefix
        if (len &gt; 3) {
          args.pop(); // no capture
        }
      } else if (len === 3) {
        args.push(false);
      }
      return args;
    }

    function apply(args, sType) {
      var element = args.shift(),
          method = [evt[sType]];
      if (old) {
        element[method](args[0], args[1]);
      } else {
        element[method].apply(element, args);
      }
    }

    function addEvent() {
      apply(getArgs(arguments), 'add');
    }

    function removeEvent() {
      apply(getArgs(arguments), 'remove');
    }

    return {
      add: addEvent,
      remove: removeEvent
    };

  }());

  function rnd(n,min) {
    if (isNaN(min)) {
      min = 0;
    }
    return (Math.random()*n)+min;
  }

  function plusMinus(n) {
    return (parseInt(rnd(2),10)===1?n*-1:n);
  }

  this.randomizeWind = function() {
    var i;
// 2015-11-19 lightbox
//    vRndX = plusMinus(rnd(storm.vMaxX,0.2));
//    vRndY = rnd(storm.vMaxY,0.2);
    if (this.flakes) {
      for (i=0; i&lt;this.flakes.length; i++) {
        if (this.flakes[i].active) {
          this.flakes[i].setVelocities();
        }
      }
    }
  };

  this.scrollHandler = function() {
    var i;
    // "attach" snowflakes to bottom of window if no absolute bottom value was given
    scrollY = (storm.flakeBottom ? 0 : parseInt(window.scrollY || document.documentElement.scrollTop || (noFixed ? document.body.scrollTop : 0), 10));
    if (isNaN(scrollY)) {
      scrollY = 0; // Netscape 6 scroll fix
    }
    if (!fixedForEverything &amp;&amp; !storm.flakeBottom &amp;&amp; storm.flakes) {
      for (i=0; i&lt;storm.flakes.length; i++) {
        if (storm.flakes[i].active === 0) {
          storm.flakes[i].stick();
        }
      }
    }
  };

  this.resizeHandler = function() {
    if (window.innerWidth || window.innerHeight) {
      screenX = window.innerWidth - 16 - storm.flakeRightOffset;
      screenY = (storm.flakeBottom || window.innerHeight);
    } else {
      screenX = (document.documentElement.clientWidth || document.body.clientWidth || document.body.scrollWidth) - (!isIE ? 8 : 0) - storm.flakeRightOffset;
      screenY = storm.flakeBottom || document.documentElement.clientHeight || document.body.clientHeight || document.body.scrollHeight;
    }
    docHeight = document.body.offsetHeight;
    screenX2 = parseInt(screenX/2,10);
  };

  this.resizeHandlerAlt = function() {
    screenX = storm.targetElement.offsetWidth - storm.flakeRightOffset;
    screenY = storm.flakeBottom || storm.targetElement.offsetHeight;
    screenX2 = parseInt(screenX/2,10);
    docHeight = document.body.offsetHeight;
  };

  this.freeze = function() {
    // pause animation
    if (!storm.disabled) {
      storm.disabled = 1;
    } else {
      return false;
    }
    storm.timer = null;
  };

  this.resume = function() {
    if (storm.disabled) {
       storm.disabled = 0;
    } else {
      return false;
    }
    storm.timerInit();
  };

  this.toggleSnow = function() {
    if (!storm.flakes.length) {
      // first run
      storm.start();
    } else {
      storm.active = !storm.active;
      if (storm.active) {
        storm.show();
        storm.resume();
      } else {
        storm.stop();
        storm.freeze();
      }
    }
  };

  this.stop = function() {
    var i;
    this.freeze();
    for (i=0; i&lt;this.flakes.length; i++) {
      this.flakes[i].o.style.display = 'none';
    }
    storm.events.remove(window,'scroll',storm.scrollHandler);
    storm.events.remove(window,'resize',storm.resizeHandler);
    if (storm.freezeOnBlur) {
      if (isIE) {
        storm.events.remove(document,'focusout',storm.freeze);
        storm.events.remove(document,'focusin',storm.resume);
      } else {
        storm.events.remove(window,'blur',storm.freeze);
        storm.events.remove(window,'focus',storm.resume);
      }
    }
  };

  this.show = function() {
    var i;
    for (i=0; i&lt;this.flakes.length; i++) {
      this.flakes[i].o.style.display = 'block';
    }
  };

  this.SnowFlake = function(type,x,y) {
    var s = this;
    this.type = type;
    this.x = x||parseInt(rnd(screenX-20),10);
    this.y = (!isNaN(y)?y:-rnd(screenY)-12);
    this.vX = null;
    this.vY = null;
    this.vAmpTypes = [1,1.2,1.4,1.6,1.8]; // "amplification" for vX/vY (based on flake size/type)
    this.vAmp = this.vAmpTypes[this.type] || 1;
    this.melting = false;
    this.meltFrameCount = storm.meltFrameCount;
    this.meltFrames = storm.meltFrames;
    this.meltFrame = 0;
    this.twinkleFrame = 0;
    this.active = 1;
    this.fontSize = (10+(this.type/5)*10);
    this.o = document.createElement('div');
    this.o.innerHTML = storm.snowCharacter;
    if (storm.className) {
      this.o.setAttribute('class', storm.className);
    }
    this.o.style.color = storm.snowColor;
    this.o.style.position = (fixedForEverything?'fixed':'absolute');
    if (storm.useGPU &amp;&amp; features.transform.prop) {
      // GPU-accelerated snow.
      this.o.style[features.transform.prop] = 'translate3d(0px, 0px, 0px)';
    }
    this.o.style.width = storm.flakeWidth+'px';
    this.o.style.height = storm.flakeHeight+'px';
    this.o.style.fontFamily = 'arial,verdana';
    this.o.style.cursor = 'default';
    this.o.style.overflow = 'hidden';
    this.o.style.fontWeight = 'normal';
    this.o.style.zIndex = storm.zIndex;
    docFrag.appendChild(this.o);

    this.refresh = function() {
      if (isNaN(s.x) || isNaN(s.y)) {
        // safety check
        return false;
      }
      storm.setXY(s.o, s.x, s.y);
    };

    this.stick = function() {
      if (noFixed || (storm.targetElement !== document.documentElement &amp;&amp; storm.targetElement !== document.body)) {
        s.o.style.top = (screenY+scrollY-storm.flakeHeight)+'px';
      } else if (storm.flakeBottom) {
        s.o.style.top = storm.flakeBottom+'px';
      } else {
        s.o.style.display = 'none';
        s.o.style.bottom = '0%';
        s.o.style.position = 'fixed';
        s.o.style.display = 'block';
      }
    };

    this.vCheck = function() {
      if (s.vX&gt;=0 &amp;&amp; s.vX&lt;0.2) {
        s.vX = 0.2;
      } else if (s.vX&lt;0 &amp;&amp; s.vX&gt;-0.2) {
        s.vX = -0.2;
      }
      if (s.vY&gt;=0 &amp;&amp; s.vY&lt;0.2) {
        s.vY = 0.2;
      }
    };

    this.move = function() {
      var vX = s.vX*windOffset, yDiff;
      s.x += vX;
      s.y += (s.vY*s.vAmp);
      if (s.x &gt;= screenX || screenX-s.x &lt; storm.flakeWidth) { // X-axis scroll check
        s.x = 0;
      } else if (vX &lt; 0 &amp;&amp; s.x-storm.flakeLeftOffset &lt; -storm.flakeWidth) {
        s.x = screenX-storm.flakeWidth-1; // flakeWidth;
      }
      s.refresh();
      yDiff = screenY+scrollY-s.y+storm.flakeHeight;
      if (yDiff&lt;storm.flakeHeight) {
        s.active = 0;
        if (storm.snowStick) {
          s.stick();
        } else {
          s.recycle();
        }
      } else {
        if (storm.useMeltEffect &amp;&amp; s.active &amp;&amp; s.type &lt; 3 &amp;&amp; !s.melting &amp;&amp; Math.random()&gt;0.998) {
          // ~1/1000 chance of melting mid-air, with each frame
          s.melting = true;
          s.melt();
          // only incrementally melt one frame
          // s.melting = false;
        }
        if (storm.useTwinkleEffect) {
          if (s.twinkleFrame &lt; 0) {
            if (Math.random() &gt; 0.97) {
              s.twinkleFrame = parseInt(Math.random() * 8, 10);
            }
          } else {
            s.twinkleFrame--;
            if (!opacitySupported) {
              s.o.style.visibility = (s.twinkleFrame &amp;&amp; s.twinkleFrame % 2 === 0 ? 'hidden' : 'visible');
            } else {
              s.o.style.opacity = (s.twinkleFrame &amp;&amp; s.twinkleFrame % 2 === 0 ? 0 : 1);
            }
          }
        }
      }
    };

    this.animate = function() {
      // main animation loop
      // move, check status, die etc.
      s.move();
    };

    this.setVelocities = function() {
// 2015-11-19 lightbox : vRndX &gt; storm.vRndX,vRndY &gt; storm.vRndY
      s.vX = storm.vWindX+rnd(storm.vMaxX*0.12,0.1);
      s.vY = storm.vWindY+rnd(storm.vMaxY*0.12,0.1);
    };

    this.setOpacity = function(o,opacity) {
      if (!opacitySupported) {
        return false;
      }
      o.style.opacity = opacity;
    };

    this.melt = function() {
      if (!storm.useMeltEffect || !s.melting) {
        s.recycle();
      } else {
        if (s.meltFrame &lt; s.meltFrameCount) {
          s.setOpacity(s.o,s.meltFrames[s.meltFrame]);
          s.o.style.fontSize = s.fontSize-(s.fontSize*(s.meltFrame/s.meltFrameCount))+'px';
          s.o.style.lineHeight = storm.flakeHeight+2+(storm.flakeHeight*0.75*(s.meltFrame/s.meltFrameCount))+'px';
          s.meltFrame++;
        } else {
          s.recycle();
        }
      }
    };

    this.recycle = function() {
      s.o.style.display = 'none';
      s.o.style.position = (fixedForEverything?'fixed':'absolute');
      s.o.style.bottom = 'auto';
      s.setVelocities();
      s.vCheck();
      s.meltFrame = 0;
      s.melting = false;
      s.setOpacity(s.o,1);
      s.o.style.padding = '0px';
      s.o.style.margin = '0px';
      s.o.style.fontSize = s.fontSize+'px';
      s.o.style.lineHeight = (storm.flakeHeight+2)+'px';
      s.o.style.textAlign = 'center';
      s.o.style.verticalAlign = 'baseline';
      s.x = parseInt(rnd(screenX-storm.flakeWidth-20),10);
      s.y = parseInt(rnd(screenY)*-1,10)-storm.flakeHeight;
      s.refresh();
      s.o.style.display = 'block';
      s.active = 1;
    };

    this.recycle(); // set up x/y coords etc.
    this.refresh();

  };

  this.snow = function() {
    var active = 0, flake = null, i, j;
    for (i=0, j=storm.flakes.length; i&lt;j; i++) {
      if (storm.flakes[i].active === 1) {
        storm.flakes[i].move();
        active++;
      }
      if (storm.flakes[i].melting) {
        storm.flakes[i].melt();
      }
    }
    if (active&lt;storm.flakesMaxActive) {
      flake = storm.flakes[parseInt(rnd(storm.flakes.length),10)];
      if (flake.active === 0) {
        flake.melting = true;
      }
    }
    if (storm.timer) {
      features.getAnimationFrame(storm.snow);
    }
  };

  this.mouseMove = function(e) {
    if (!storm.followMouse) {
      return true;
    }
    var x = parseInt(e.clientX,10);
    if (x&lt;screenX2) {
      windOffset = -windMultiplier+(x/screenX2*windMultiplier);
    } else {
      x -= screenX2;
      windOffset = (x/screenX2)*windMultiplier;
    }
  };

  this.createSnow = function(limit,allowInactive) {
    var i;
    for (i=0; i&lt;limit; i++) {
      storm.flakes[storm.flakes.length] = new storm.SnowFlake(parseInt(rnd(flakeTypes),10));
      if (allowInactive || i&gt;storm.flakesMaxActive) {
        storm.flakes[storm.flakes.length-1].active = -1;
      }
    }
    storm.targetElement.appendChild(docFrag);
  };

  this.timerInit = function() {
    storm.timer = true;
    storm.snow();
  };

  this.init = function() {
    var i;
    for (i=0; i&lt;storm.meltFrameCount; i++) {
      storm.meltFrames.push(1-(i/storm.meltFrameCount));
    }
    storm.randomizeWind();
    storm.createSnow(storm.flakesMax); // create initial batch
    storm.events.add(window,'resize',storm.resizeHandler);
    storm.events.add(window,'scroll',storm.scrollHandler);
    if (storm.freezeOnBlur) {
      if (isIE) {
        storm.events.add(document,'focusout',storm.freeze);
        storm.events.add(document,'focusin',storm.resume);
      } else {
        storm.events.add(window,'blur',storm.freeze);
        storm.events.add(window,'focus',storm.resume);
      }
    }
    storm.resizeHandler();
    storm.scrollHandler();
    if (storm.followMouse) {
      storm.events.add(isIE?document:window,'mousemove',storm.mouseMove);
    }
    storm.animationInterval = Math.max(20,storm.animationInterval);
    storm.timerInit();
  };

  this.start = function(bFromOnLoad) {
    if (!didInit) {
      didInit = true;
    } else if (bFromOnLoad) {
      // already loaded and running
      return true;
    }
    if (typeof storm.targetElement === 'string') {
      var targetID = storm.targetElement;
      storm.targetElement = document.getElementById(targetID);
      if (!storm.targetElement) {
        throw new Error('Snowstorm: Unable to get targetElement "'+targetID+'"');
      }
    }
    if (!storm.targetElement) {
      storm.targetElement = (document.body || document.documentElement);
    }
    if (storm.targetElement !== document.documentElement &amp;&amp; storm.targetElement !== document.body) {
      // re-map handler to get element instead of screen dimensions
      storm.resizeHandler = storm.resizeHandlerAlt;
      //and force-enable pixel positioning
      storm.usePixelPosition = true;
    }
    storm.resizeHandler(); // get bounding box elements
    storm.usePositionFixed = (storm.usePositionFixed &amp;&amp; !noFixed &amp;&amp; !storm.flakeBottom); // whether or not position:fixed is to be used
    if (window.getComputedStyle) {
      // attempt to determine if body or user-specified snow parent element is relatlively-positioned.
      try {
        targetElementIsRelative = (window.getComputedStyle(storm.targetElement, null).getPropertyValue('position') === 'relative');
      } catch(e) {
        // oh well
        targetElementIsRelative = false;
      }
    }
    fixedForEverything = storm.usePositionFixed;
    if (screenX &amp;&amp; screenY &amp;&amp; !storm.disabled) {
      storm.init();
      storm.active = true;
    }
  };

  function doDelayedStart() {
    window.setTimeout(function() {
      storm.start(true);
    }, 20);
    // event cleanup
    storm.events.remove(isIE?document:window,'mousemove',doDelayedStart);
  }

  function doStart() {
    if (!storm.excludeMobile || !isMobile) {
      doDelayedStart();
    }
    // event cleanup
    storm.events.remove(window, 'load', doStart);
  }

  // hooks for starting the snow
  if (storm.autoStart) {
    storm.events.add(window, 'load', doStart, false);
  }

  return this;

}(window, document));

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code151120000934"); 
</script>
<pre>




</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>JavaScript</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/429939672</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/219944268.html</link>
      <title>Google MAP API V3 + Google AdSense は、2015年11月2日(日本時間では3日) で廃止されていたようです。</title>
      <pubDate>Thu, 19 Nov 2015 02:34:04 +0900</pubDate>
            <description>Google Maps Javascript API AdSense LibraryThe adsense library has been deprecated. This library will continue to work until November 2, 2015. After that date, the library will no longer be available.AdSenseのライブラリが廃止されました。このライブラリは、2015年11月2日..</description>
            <itunes:summary><![CDATA[

<a href="https://google-developers.appspot.com/maps/documentation/javascript/advertising?hl=ja" target="_blank">Google Maps Javascript API AdSense Library</a>


The adsense library has been deprecated. This library will continue to work until November 2, 2015. After that date, the library will no longer be available.

AdSenseのライブラリが廃止されました。このライブラリは、2015年11月2日まで作業を継続すると、その日の後、ライブラリは利用できなくなります。

確かに AdSense のチャネルを調べるとそうなってました。単なる興味本位で貼ってただけなので、支障は無いですが少しさびしい気もします。そもそも Google MAP の有償化と並行して行われた作業の一つなんでしょうね。

<a href="https://www.facebook.com/notes/issun/google%E3%83%9E%E3%83%83%E3%83%97%E6%9C%89%E6%96%99%E5%8C%96%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81%EF%BC%91%E6%97%A5%E3%81%82%E3%81%9F%E3%82%8A%EF%BC%92%E4%B8%87%EF%BC%95%E5%8D%83%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E4%BB%A5%E4%B8%8A%E3%81%8C%E5%AF%BE%E8%B1%A1/256741484377297" target="_blank">googleマップ、有料化のまとめ。１日あたり２万５千読み込み以上が対象。</a>
(2011年11月4日 記事)

<a href="http://qiita.com/maruyam-a/items/858dd3fea52f6d8cf3a3" target="_blank">GoogleMapAPIの商用利用</a>
(2014/04/22 記事)





<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre class=w6>
<a href="https://google-developers.appspot.com/maps/documentation/javascript/advertising?hl=ja" target="_blank">Google Maps Javascript API AdSense Library</a>

<pre class="this bd">
The adsense library has been deprecated. This library will continue to work until November 2, 2015. After that date, the library will no longer be available.
</pre>
AdSenseのライブラリが廃止されました。このライブラリは、2015年11月2日まで作業を継続すると、その日の後、ライブラリは利用できなくなります。

確かに AdSense のチャネルを調べるとそうなってました。単なる興味本位で貼ってただけなので、支障は無いですが少しさびしい気もします。そもそも Google MAP の有償化と並行して行われた作業の一つなんでしょうね。

<a href="https://www.facebook.com/notes/issun/google%E3%83%9E%E3%83%83%E3%83%97%E6%9C%89%E6%96%99%E5%8C%96%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81%EF%BC%91%E6%97%A5%E3%81%82%E3%81%9F%E3%82%8A%EF%BC%92%E4%B8%87%EF%BC%95%E5%8D%83%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E4%BB%A5%E4%B8%8A%E3%81%8C%E5%AF%BE%E8%B1%A1/256741484377297" target="_blank">googleマップ、有料化のまとめ。１日あたり２万５千読み込み以上が対象。</a>
(2011年11月4日 記事)

<a href="http://qiita.com/maruyam-a/items/858dd3fea52f6d8cf3a3" target="_blank">GoogleMapAPIの商用利用</a>
(2014/04/22 記事)



</pre>

<!--br><br>
<div id="map_canvas" style="width:650px; height:700px;"></div>
<script
	type="text/javascript"
	src="http://maps.googleapis.com/maps/api/js?sensor=false&libraries=adsense"></script>
<script type="text/javascript">
var userAgent = window.navigator.userAgent.toLowerCase();
var appVersion = window.navigator.appVersion.toLowerCase();
if (userAgent.indexOf("msie") > -1) {
document.body.onload = function () {
	var latlng = new google.maps.LatLng(34.702777,135.495071);
	var myOptions = {
		zoom: 15,
		center: latlng,
		mapTypeControlOptions: {
			mapTypeIds: [
				google.maps.MapTypeId.HYBRID,
				google.maps.MapTypeId.ROADMAP,
				google.maps.MapTypeId.SATELLITE
			],
			style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
		},
		mapTypeId: google.maps.MapTypeId.SATELLITE,
		scaleControl: true,
		navigationControlOptions : {
			style: google.maps.NavigationControlStyle.ZOOM_PAN
		}
	};
	var map = new google.maps.Map(
		document.getElementById("map_canvas"),
		myOptions
	);

	var adUnitDiv = document.createElement('div');
	var adUnitOptions = {
		format: google.maps.adsense.AdFormat.SKYSCRAPER,
		position: google.maps.ControlPosition.RIGHT_CENTER,
		publisherId: 'ca-pub-9470709952717511',
		map: map
	};
	var ad = new google.maps.adsense.AdUnit(
		adUnitDiv,
		adUnitOptions
	);
}
}
else {
(function () {
	var latlng = new google.maps.LatLng(34.702777,135.495071);
	var myOptions = {
		zoom: 15,
		center: latlng,
		mapTypeControlOptions: {
			mapTypeIds: [
				google.maps.MapTypeId.HYBRID,
				google.maps.MapTypeId.ROADMAP,
				google.maps.MapTypeId.SATELLITE
			],
			style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
		},
		mapTypeId: google.maps.MapTypeId.SATELLITE,
		scaleControl: true,
		navigationControlOptions : {
			style: google.maps.NavigationControlStyle.ZOOM_PAN
		}
	};
	var map = new google.maps.Map(
		document.getElementById("map_canvas"),
		myOptions
	);

	var adUnitDiv = document.createElement('div');
	var adUnitOptions = {
		format: google.maps.adsense.AdFormat.SKYSCRAPER,
		position: google.maps.ControlPosition.RIGHT_CENTER,
		publisherId: 'ca-pub-9470709952717511',
		map: map
	};
	var ad = new google.maps.adsense.AdUnit(
		adUnitDiv,
		adUnitOptions
	);

})();
}
</script>
<pre>
Google MAP API V2 が廃止になるので、V2 でやっていた AdSense ユニットの設置
がどうなるかを調べてみましたが、以前より解りやすい説明なので書き方はすぐ解
ったのですが、比較的小さいサイズの MAP の場合は、本来の地図の邪魔になると言
う意味だと思いますが、初期状態で表示されません。

ドラッグで地図を動かすと表示されます。

最初から表示したい場合は、それなりに大きい地図にする必要があります
( zoom も関係して来ます。ある程度の広域でないと出ません )

※ また、今回も日本語版には書かれていません。

<b style='color:#0000ff'>maps.googleapis.com/maps/api/js?sensor=false&libraries=adsense のように、ラ
イブラリを使う場合は、パラメータを渡す必要があります => libraries=adsense</b>
<b class=sttl>リファレンス</b>

<a href="http://code.google.com/intl/en/apis/maps/documentation/javascript/reference.html#AdUnit" target="_blank">Google Maps Javascript API V3 Reference - Google Maps JavaScript API V3 - Google Code</a>

</pre>
<div id="sh_4e452a6580525">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
.syntaxhighlighter div,.syntaxhighlighter span,.syntaxhighlighter code { 
	font-size:12px!important; 
	font-family: "ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div style='width:600px;'> 
<pre name="code110812222805" class="brush:js">
&lt;div id="map_canvas" style="width:650px; height:700px;"&gt;&lt;/div&gt;
&lt;script
	type="text/javascript"
	src="http://maps.googleapis.com/maps/api/js?sensor=false&amp;libraries=adsense"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
(function () {
	var latlng = new google.maps.LatLng(34.702777,135.495071);
	var myOptions = {
		zoom: 15,
		center: latlng,
		mapTypeControlOptions: {
			mapTypeIds: [
				google.maps.MapTypeId.HYBRID,
				google.maps.MapTypeId.ROADMAP,
				google.maps.MapTypeId.SATELLITE
			],
			style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
		},
		mapTypeId: google.maps.MapTypeId.SATELLITE,
		scaleControl: true,
		navigationControlOptions : {
			style: google.maps.NavigationControlStyle.ZOOM_PAN
		}
	};
	var map = new google.maps.Map(
		document.getElementById("map_canvas"),
		myOptions
	);

	var adUnitDiv = document.createElement('div');
	var adUnitOptions = {
		format: google.maps.adsense.AdFormat.SKYSCRAPER,
		position: google.maps.ControlPosition.RIGHT_CENTER,
		publisherId: 'ca-pub-xxxxxxxxxxxxxxx',
		map: map
	};
	var ad = new google.maps.adsense.AdUnit(
		adUnitDiv,
		adUnitOptions
	);

})();
&lt;/script&gt;
</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code110812222805"); 
</script>
<pre>
XP + IE8 の環境でのみ onload しないとうまく動かなかったので、もう面倒なので
ここでは IE の場合は、onload で書いています。

google.maps.event.addDomListener(window, 'load', function(){ 処理 } );

で書いてもいいと思いますが、今時の環境ならば DIV の真下にスクリプトを書いて
も問題無いと思います。
( Google MAP を利用するページが軽ければ IE8 でも動くはずです )

<b class=sttl>関連する記事</b>

<a href="http://logicalerror.seesaa.net/article/219911288.html" target="_blank">Google MAP API V3 を使う為に最初に必要な MapOptions オブジェクトの作成方法</a>



</pre--><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>Google</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/219944268</guid>
                </item>
        <item>
      <link>https://webcraft.seesaa.net/article/122129343.html</link>
      <title>allow_url_fopen と allow_url_include</title>
      <pubDate>Sun, 08 Mar 2015 16:01:37 +0900</pubDate>
            <description>allow_url_fopen は、デフォルトで有効ですが、allow_url_include はそうではありません。名前デフォルト変更可能変更履歴allow_url_fopen&quot;1&quot;PHP_INI_SYSTEMPHP &amp;lt;= 4.3.4 では PHP_INI_ALL。PHP 4.0.4 から利用可能です。allow_url_include&quot;0&quot;PHP_INI_SYSTEMPHP 5.2.0 から利用可能です。何れも、セキュリティ上の理由により、アプリケーションからは変更..</description>
            <itunes:summary><![CDATA[

<a href="http://php.net/manual/ja/filesystem.configuration.php" target="_blank">allow_url_fopen は、デフォルトで有効ですが、allow_url_include はそうではありません</a>。




名前デフォルト変更可能変更履歴<a target="_blank" href="http://php.net/manual/ja/filesystem.configuration.php#ini.allow-url-fopen">allow_url_fopen</a>"1"PHP_INI_SYSTEMPHP &lt;= 4.3.4 では PHP_INI_ALL。PHP 4.0.4 から利用可能です。<a target="_blank" href="http://php.net/manual/ja/filesystem.configuration.php#ini.allow-url-include">allow_url_include</a>"0"PHP_INI_SYSTEMPHP 5.2.0 から利用可能です。


何れも、セキュリティ上の理由により、アプリケーションからは変更できませんが、allow_url_fopen が有効であれば、allow_url_include が無効でも代替方法があります。



 
 
 

function inc( $path ) {
// *******************************
// 配列にセット
// *******************************
	$inc = @file( $path );
// *******************************
// 最初と最後の行を削除
// *******************************
	array_shift($inc);
	array_pop($inc);
// *******************************
// 配列をテキストに戻す
// *******************************
	$GLOBALS['inc_eval_txt'] = implode( "", $inc );
// *******************************
// テキストを実行する
// *******************************
	eval($GLOBALS['inc_eval_txt']);
}







まず、ファイルを配列にセットして、最初と最後の行を取り除きます( &lt;?php と ?&gt; の削除 ) 
※ うまくいくように、ファイルの記述方法を定める必要があります。
( その前提ならば、ただのテキストファイルにするといいです )
※ ファイルの拡張子は、テキストの内容がサーバによって加工されないものを使います。

テストしてみると解りますが、include を使った場合でも、http 経由で読み込むテキストの拡張子は、php であってはいけません。( .php では サーバがソースコードを返す事が無いからです )

その後、テキストに戻してからグローバル変数に代入して eval して内容を実行します。


<a href="http://php.net/manual/ja/function.eval.php" target="_blank">eval は危険な処理</a>ですが、それはユーザーから受け取ったデータを対象にする場合です。ここでの処理は、本来allow_url_include によって利用可能な信頼できる文字列が対象です。


<a href="http://winofsql.jp/php/test/print.txt" target="_blank">http://winofsql.jp/php/test/print.txt</a>


 
 
 

&lt;?php
inc("http://winofsql.jp/php/test/print.txt");

allow_url_inc();

print "&lt;pre&gt;";

$arr = get_defined_functions();
print_r( $arr["user"] );

print "&lt;/pre&gt;";

function inc( $path ) {
// *******************************
// 配列にセット
// *******************************
	$inc = @file( $path );
// *******************************
// 最初と最後の行を削除
// *******************************
	array_shift($inc);
	array_pop($inc);
// *******************************
// 配列をテキストに戻す
// *******************************
	$GLOBALS['inc_eval_txt'] = implode( "", $inc );
// *******************************
// テキストを実行する
// *******************************
	eval($GLOBALS['inc_eval_txt']);
}


?&gt;










<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
<pre>
<a href="http://php.net/manual/ja/filesystem.configuration.php" target="_blank">allow_url_fopen は、デフォルトで有効ですが、allow_url_include はそうではありません</a>。
</pre>
<style type="text/css">
#lboxtable * {
	font-family: メイリオ,'ＭＳ Ｐゴシック';
	font-size: 16px;
}
#lboxtable table {
	width:600px;
	border-collapse: collapse;
	border-style: solid;
	border-color: #000000;
	border-width: 1px;
	background-color: #FFFFFF;
}
#lboxtable td {
	padding: 5px;
	border-style: solid;
	border-color: #000000;
	border-width: 1px;
	/* white-space: nowrap; */
}
#lboxtable th {
	padding: 5px;
	border-style: solid;
	border-color: #000000;
	border-width: 1px;
	background-color: silver;
	/* white-space: nowrap; */
}
#lboxtable .header {
	padding: 5px;
	border-style: solid;
	border-color: #000000;
	border-width: 1px;
	background-color: silver;
	/* white-space: nowrap; */
}
</style>

<DIV id="lboxtable">
<table><thead><tr ><th >名前</th><th >デフォルト</th><th >変更可能</th><th >変更履歴</th></tr></thead><tbody ><tr ><td ><a target="_blank" href="http://php.net/manual/ja/filesystem.configuration.php#ini.allow-url-fopen"  >allow_url_fopen</a></td><td >"1"</td><td >PHP_INI_SYSTEM</td><td >PHP &lt;= 4.3.4 では PHP_INI_ALL。<br>PHP 4.0.4 から利用可能です。</td></tr><tr ><td ><a target="_blank" href="http://php.net/manual/ja/filesystem.configuration.php#ini.allow-url-include"  >allow_url_include</a></td><td >"0"</td><td >PHP_INI_SYSTEM</td><td >PHP 5.2.0 から利用可能です。</td></tr></tbody></table></DIV>

<pre>
何れも、セキュリティ上の理由により、アプリケーションからは変更できませんが、allow_url_fopen が有効であれば、allow_url_include が無効でも代替方法があります。
</pre>

<div id="sh_54eef5a971730">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_54eef5a971730 .syntaxhighlighter div,#sh_54eef5a971730 .syntaxhighlighter span,#sh_54eef5a971730 .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code150226193001" class="brush:php">
function inc( $path ) {
// *******************************
// 配列にセット
// *******************************
	$inc = @file( $path );
// *******************************
// 最初と最後の行を削除
// *******************************
	array_shift($inc);
	array_pop($inc);
// *******************************
// 配列をテキストに戻す
// *******************************
	$GLOBALS['inc_eval_txt'] = implode( "", $inc );
// *******************************
// テキストを実行する
// *******************************
	eval($GLOBALS['inc_eval_txt']);
}

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code150226193001"); 
</script>

<pre>
まず、ファイルを配列にセットして、最初と最後の行を取り除きます( &lt;?php と ?&gt; の削除 ) 
※ うまくいくように、ファイルの記述方法を定める必要があります。
( その前提ならば、ただのテキストファイルにするといいです )
※ ファイルの拡張子は、テキストの内容がサーバによって加工されないものを使います。

<strong>テストしてみると解りますが、include を使った場合でも、http 経由で読み込むテキストの拡張子は、php であってはいけません。( .php では サーバがソースコードを返す事が無いからです )</strong>

その後、テキストに戻してからグローバル変数に代入して eval して内容を実行します。

<pre class="this bd">
<a href="http://php.net/manual/ja/function.eval.php" target="_blank">eval は危険な処理</a>ですが、それはユーザーから受け取ったデータを対象にする場合です。ここでの処理は、本来allow_url_include によって利用可能な信頼できる文字列が対象です。
</pre>

<a href="http://winofsql.jp/php/test/print.txt" target="_blank">http://winofsql.jp/php/test/print.txt</a>
</pre>
<div id="sh_54fc011f18efa">
<style type="text/css"> 
.syntaxhighlighter { 
	word-wrap:break-word!important; 
} 
 
#sh_54fc011f18efa .syntaxhighlighter div,#sh_54fc011f18efa .syntaxhighlighter span,#sh_54fc011f18efa .syntaxhighlighter code { 
	font-size:16px!important; 
	font-family: "メイリオ","ＭＳ Ｐゴシック"!important; 
} 
</style> 
 
<div> 
<pre data-name="code150308165823" class="brush:php">
&lt;?php
inc("http://winofsql.jp/php/test/print.txt");

allow_url_inc();

print "&lt;pre&gt;";

$arr = get_defined_functions();
print_r( $arr["user"] );

print "&lt;/pre&gt;";

function inc( $path ) {
// *******************************
// 配列にセット
// *******************************
	$inc = @file( $path );
// *******************************
// 最初と最後の行を削除
// *******************************
	array_shift($inc);
	array_pop($inc);
// *******************************
// 配列をテキストに戻す
// *******************************
	$GLOBALS['inc_eval_txt'] = implode( "", $inc );
// *******************************
// テキストを実行する
// *******************************
	eval($GLOBALS['inc_eval_txt']);
}


?&gt;

</pre>
</div>
</div>
<script type="text/javascript">
dp.SyntaxHighlighter.HighlightAll("code150308165823"); 
</script>
<pre>




</pre><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>PHP</category>
      <author>lightbox</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,webcraft/122129343</guid>
                </item>
      </channel>
</rss>

