Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/2-11889071

-件のトラックバック

-件のコメント

[C32] 承認待ちコメント

このコメントは管理者の承認待ちです

[C33] Re: 質問

回答おそくなってすみません。
すっかりクロスドメインの事なんて忘れてしまって、回答できません。
もう、ほとんどjavascriptも忘れてます。すみません。役に立たなくて。
  • 2011-04-12
  • kovayashi
  • URL
  • 編集

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

クロスドメイン、クロスブラウザはできないのか。

先日作ったFirefoxでしか動かない2ch
viewer
(手抜き多数)についてのメモ。

●トライ1
先ずはjavascriptからhttpを試みる。

<html>
<head>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
function init(){
new Ajax.Request("http://menu.2ch.net/bbsmenu.html", {
method:"get",
onSuccess: function(xmlhttp) {
$("res").innerHTML=xmlhttp.responseText;
}
});
}
</script>
</head>
<body onload="init()">
<div id="res"></div>
</body>

→IEでは、ローカルで実行は文字化けするが、アクセスできる。
 (Firfox、operaは真っ白。)しかし、サーバーにアップして
 外からアクセスすると真っ白。(alertなし)
 いわゆるクロスドメインだから?

●トライ2
Firefoxに特化したクロスドメインする方法があったので試してみる。
($しか使い道ないからprototype.jsはやめた)

<html>
<head>
<script type="text/javascript">
function init(){
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
alert("Permission UniversalBrowserRead denied.");
}

var xmlhttp=new XMLHttpRequest();
xmlhttp.onload=function(){
document.getElementById('res').innerHTML = xmlhttp.responseText;
}
xmlhttp.open("GET", "http://menu.2ch.net/bbsmenu.html");
xmlhttp.send(null);
}
</script>
</head>
<body onload="init()">
<div id="res"></div>
</body>
</html>

→Firfoxではクロスドメインでもアクセスできるように。しかしトライ1のIE同様
 に文字化け。
 →2chがcharset=x-sjisだから?

 IE、operaはErrでcatch(e)のalert。

●トライ3
overrideMimeTypeで文字化け対策できる方法があったので試してみる。overrideMimeTypeはIEでは出来ないらしい。

<html>
<head>
<script type="text/javascript">
function init(){
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
alert("Permission UniversalBrowserRead denied.");
}

var xmlhttp=new XMLHttpRequest();
xmlhttp.onload=function(){
document.getElementById('res').innerHTML = xmlhttp.responseText;
}
xmlhttp.overrideMimeType("text/html; charset=shift_jis");
xmlhttp.open("GET", "http://menu.2ch.net/bbsmenu.html");
xmlhttp.send(null);
}
</script>
</head>
<body onload="init()">
<div id="res"></div>
</body>
</html>

→Firefoxではクロスドメインでしかも文字化けもなし!

といった経緯で、友人に作った2ch viewerをメールで自慢すると、『最近はWIN携帯のoperaで見てますから・・・』との返信。
いまどき、クロスブラウザでないと価値なしかぁ。。。クロスドメイン&クロスブラウザしたいなぁ・・・ということで、もう少し調べる。

●調査1:crossdomain.js
javascriptからFlash経由って方法があるようだ。
→crossdomain.xmlなるファイルがアクセスするドメインのルートに無いと
 無理のよう。当然のごとく、2chcrossdomain.xmlは2chには無かった。
 (302で「もうずっと人大杉 」に飛ばされる) 
 因みに、youtubeにはhttp://youtube.com/crossdomain.xmlが置いてあった。

●調査2の1:dojo.js
Dojo/JavaScript ToolkitのメモのAjax機能に期待できるサンプルを発見。
ver0.42での記事のようなので、0.42をダウンロード。(08/02/25の最新は1.0.2)
tarファイルを解凍して、dojo-0.4.2p1のディレクトリの下に先ずは、ボタンクリックで"test"の文字列をクロスドメインで取得してalertするサンプルをローカルにコピペして置いてみる。

→IEではうまく動く。Firefoxではエラーコンソールに
 『エラー: uncaught exception: Permission denied
 to call method XMLHttpRequest.open』が出力。
 operaは真っ白。(エラーコンソールにも何もでない)
 →今度はサーバーにアップして外からアクセス、つまり本当のクロスドメイン
  を試してみる。
  →IE真っ白(左下に「ページでエラーが発生しました。」)
   →試しにサーバにsample/sample.txtを置いて、dojo.io.bindの
    パラメータurlをそれを指して対応させる。
    →動く。 ? つまりdojo.jsは(xmlContent-Type: text/javascriptでないと)クロスドメインできないの?

●調査2の2:dojo.js
Dojoで簡単にクロスドメインAjaxを実現に「まずは下のボタンを押してみてください。実際にYahoo!から画像検索が実行されます。」ってサンプルをローカルにコピペして置いてみる。(コメントにあるようにdojo.io.bindの引数にmimetype: "text/javascript"を追加修正)

→IE、Firefox、operaすべてOK
 →サーバにアップして外からアクセスしてもOK

  &output=jsonなんてクエリーについてるし、いかにもマッシュアップして
  下さいってサービスだから、クロスドメインできるの当たり前って感じ
  ですが、たしかにクロスドメイン、クロスブラウザが実現してる。
  でも今やりたいのはContent-Type: text/htmlのクロスドメイン。
  text/javascriptならdojo.jsを使わなくっても、そんなに難しくない
  んじゃないかなぁ。これは後日調査。

●トライ4の1
悪あがきを思いつき、試してみる。

<meta http-equiv="refresh" content="0;url=http://menu.2ch.net/bbsmenu.html">

上記htmlをサーバにアップしてトライ1のurlを上記htmlのurlに変えてローカルで実行。

→IE、Firefox、operaで真っ白。

●トライ4の2
<meta http-equiv="refresh" content="0; url=http://menu.2ch.net/bbsmenu.html">

上記htmlをサーバにアップしてトライ2のurlを上記htmlのurlに変えてローカルで実行。

→IE、catch (e) のalert。
 Firefox、真っ白。
 opera、catch (e) のalert。

 meta http-equiv="refresh"って302を返してると思い込んでいたが、疑問に
 思い、パケットをキャプチャしてみると200 OKでbodyにそのまんま書いてある。
 metaって、ひとつ上のレイヤーを操作できるのかと思ったら違かった。そこで
 以下cgiにしてみるが同じような結果でNG。

 #!/usr/bin/ruby
 puts "Status: 302 Found" #昔はMoved Temporarilyって言ってたなぁ。
 puts "location: http://2chviewer.web.fc2.com/alias_2ch.html"
 print "\r\n"

最後に、Firefoxなのにクロスドメインできないって時はsigned.applets.codebase_principal_supportが怪しいので"こちらを参考に。 operaにはこれに該当する設定が無いみたい。Opera: Not possible yet.ってwikipediaに書いてあった。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/2-11889071

0件のトラックバック

2件のコメント

[C32] 承認待ちコメント

このコメントは管理者の承認待ちです

[C33] Re: 質問

回答おそくなってすみません。
すっかりクロスドメインの事なんて忘れてしまって、回答できません。
もう、ほとんどjavascriptも忘れてます。すみません。役に立たなくて。
  • 2011-04-12
  • kovayashi
  • URL
  • 編集

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

kovayashi

Author:kovayashi
・嫌いなもの
 →好きなもの

・インストール
 →バンドル
・バックアップ
 →アップロード
・努力
 →チート

最近のトラックバック

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。