結果的には、JSONP のもっと規模の大きいもので、外部定義で WEBページを全て作ってしまう方法です。 以下の IFRAME 内のページはこのようなコードで実装されています
<input type="button" value="IFRAME 内へのアクセス" onclick='document.getElementById("cross_domain_frame").contentWindow.document.body.style.backgroundColor = "#c0c0c0"'>
<iframe
src="about:blank"
id="cross_domain_frame"
style="width:600px;height:900px"
></iframe>
<script type="text/javascript">
str="<"+"script charset=\"utf-8\" src=\"http://toolbox.winofsql.jp/js/string_html.js\"></"+"script> ";
document.getElementById("cross_domain_frame").contentWindow.document.write(str);
document.getElementById("cross_domain_frame").contentWindow.document.close();
</script>
しかも、about:blank に書き込むので元々同一ドメインという事になるので、DOM で IFRAME 内へアクセスする事ができます(当然中から本体へのアクセスもできます)。また、http://toolbox.winofsql.jp/js/string_html.js の中身は全て文字列の書き込みになっていて、普通に作った HTML+CSS+JavaScript のページのコードをこちらのツールで文字列に変換しています。 ※ contentWindow.document は contentDocument に書き換える事ができます
document.write で書き込んだ画面内には、さらに外部ライブラリとして jQuery や jQuery プラグインや SyntaxHighlighter が使用されていますが、正しく動作しています 本当のつかいどころ この方法でブックマークレットから任意のページに画面を埋め込んで、そこから本体のページをコントロールするプラグインを作成できます。本体側は簡単な設定でそれを拒否する事もできますが、プラグインするのは個人なので、特定のサービス以外でそのような実装はあまり見た事がまだありません。 自分は以前、『手書きブログ』というサービスで、当時パレットが自由に設定できなかった部分をこの手法でブックマークレット経由でプラグインを作成して配布していた事がありましたが、本体の HTML 構成が変更されない限り、普通に機能を追加できます。 ▼ 使用例 というわけで、『関西向け東電プレミアムプラン シュミレーション』ブックマークレットを作成しました




▼ 無名関数
現在では関数名を記述する場所で無名関数をその場に書く事が多いですが、もちろん文字列でも動作します。文字列の場合は、処理する内容をタイマーが発生する時間に内容を確定させておく事が重要です( 全て文字列なので、それがかならずそのまま実行される事を利用します )
具体的には、関数内に値を埋め込む事で時間差の問題を解決できます。
関数名では、IE11、Firefox、Google Chrome、Opera で第三引数(関数の引数の数ぶん第4、第5と指定できます)が利用できる事を確認しています。
( IE では IE10 以降で第3引数が使用できるようです )
要点は、IE が window.close だけでは「確認用のメッセージボックス」を表示する為、そのチェックを回避するコードが他のブラウザでどうなるのか試す事が目的です。結果は結構多彩になりました。単純にリンクで開かれたウインドウ内で処理する場合は、IE 以外は同じ動作をするのですが、新しく開かれたページの中の IFRAME のアクセスと、ブックマークで開かれた IFRAME 内のアクセスで結構いろいろ違いが出ました( Chrome と Safari は 同じです )
※ エキスパートモードで表示しています
アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります


