• 締切済み

クロスドメインでクッキーの取得

iframeを利用してページを作成しています。 iframeには契約しているASPサービスのページを読み込んでおり、PCの環境では問題なく表示出来ております。 制作中のサイトは、モバイル環境でも表示出来るようレスポンシブルデザインで制作してり、iPhone等でも閲覧することが出来ます。 ■問題点■ iPhoneのsafariではiframeでASPサービスのページを読み込んで開くことが出来ません。 検索した所iPhoneのsafariではiframeで読み込んでいるページのクッキーを読み込めない。 またiframeで読み込んでいるASPサービスのページは先にクッキーを読み込まないとページが開かない。 事前にiPhoneのsafariでASPサービスのページを一度開いていれば、クッキーを読み込んでいる為、iframe内にASPサービスのページが読み込まれます。 現状上記の状況になっており悩んでおります。 iPhoneのsafariでASPサービスのページを読み込むには 1,iframeのページを開いた後、ASP側に用意したなんらかのページ(ダミーページ)を開く。 2,1の時点でクッキーが読み込まれると思います。ページが開いたら元のページに戻す。 上記の流れて解決出来ると思っており、参考になるサイト無いかと検索した所、下記のページが参考になると思っております。 http://d.hatena.ne.jp/yshgt/20111117/1321488709 [iPhone][javascript] iPhone Safariでクロスドメインiframeの問題と対策 内容は自分がイメージした通りなります。 ただ、javascript基本を理解出来ていない為、ページの内容を理解して反映させることが出来ません。アドバイスを頂きたいと思い質問させて頂きました。 理解出来ていない点、実行したこと。上記ページにて 1,「A. Cookieチェック」のスクリプトは「iframe内」との事ですので、読み込む側のifarmeページ「head」内に記述した。 疑問点? 読み込む側のifarmeページにスクリプトを記述して、ASPサービス側のクッキーを判別出来るのでしょうか?このスクリプトは、ASPサービス側のファイルに記述するのでしょうか。 2,Cookie が無効だったら、「B. そのドメインのダミーページを開く」のスクリプトを実行する。このスクリプトは何処に記述するのですか。 疑問点? 「戻り元のurlを渡す」を渡すと有りますので、ASPサービス側に用意した、クッキーを取得する為のページ(ダミーページ)に記述するのでしょうか。 「そのドメインのダミーページを開く」と有りますので、読み込む側のifarmeページ内に記述するのでしょうか。 現状ASPサービス側にダミーページを作成して、単独でページを開きスクリプトを実行した所 // parenturl += (parenturl.indexOf("?) > -1) ? "&" : "?"; // 上記の行でシンタックスエラーが出たため、 parenturl += (parenturl.indexOf("?") > -1) ? "&" : "?"; 最初の「"?」を「"?"」と修正したら、エラーは無くなりました。 次に、 [Error] ReferenceError: Can't find variable: parenturl global code (eatCookie.html, line 11) 上記のエラーが出ましたが、parenturl が取得されていない為のエラーだと理解しました。 3,C'. 元のページのURLを取得する(←元のページに戻すために必要) 読み込む側のifarmeページ内に、 <iframe 以下はそのまま記述し「var url =」はASPサービスで読み込むページのURLを指定しました。PCで確認した限り問題無くASPサービスのページを読み込んで表示出来ています。 「iframeのhtmlで以下のようにその情報を取り出す。」 のスクリプトは、そのまま読み込む側のifarmeページ「head」内に記述した。 ページを開いてスクリプトを実行した結果 // var pairs = query.split('&'); // 上記の行で、 [Error] TypeError: 'undefined' is not an object (evaluating 'query.split') getQueryParams (search_all, line 125) 上記のエラーが出ており、自分では対処出来ませんでした。 現状上記状態で、iPhoneのsafariではiframeでASPサービスのページを読み込めない状態です。何からヒントになる事でも良いのでアドバイスを頂けると幸いです。 他の方法で解決出来る方法が有れば、合わせてアドバイスを頂けると幸いです。

みんなの回答

回答No.3

__utma、__utmc、__utmzはGoogle Analyticsが出しているCookieですので、cookieそのものは取れていると思います。 ASPサービスが出したCookieだけが取れていないのであれば、ASPサービスのCookieの出し方が標準ではないか、 または、最初のアクセスの場合はCookieは保存されていませんから、まず最初にCookieを保存する必要があるのではないでしょうか。

maruhyper
質問者

補足

アドバイスをありがとうございます。 >__utma、__utmc、__utmzはGoogle Analyticsが出しているCookie とのことご確認ありがとうございます。 教えて頂いた「postMessage」にて、Cookieを取得出来ているとのことが確認出来ました. >または、最初のアクセスの場合はCookieは保存されていませんから、まず最初にCookieを保存する必要があるのではないでしょうか。 上記の件、始めに iPhone単独で ASP側のページを一度閲覧後で有れば、iframeにデータを読み込むことが出来ます。 希望としては、一度もASP側のページを開いたことがない端末(iPhone)で作成したiframeのページを開いた際に、ASP側のCookieを取得出来ていないとページを開くことが出来ない為、iframeページを開いた際、ASP側のCookieも取得したいと思っています。

回答No.2

ASP側のコードを書き換えられるなら、postMessageを使えばウインドウ間通信が出来ます。 https://developer.mozilla.org/ja/docs/DOM/window.postMessage 基本的には同一ドメイン制限を受けません。 送信側(iframe内から親フレームへ) parent.postMessage(document.cookie, '*'); 受信側 window.addEventListener('message', function(event){ alert( event.data); }, false);

maruhyper
質問者

お礼

補足の修正です。 良く良く見ていたら >alert( event.data); ですので、アラートを出して確認していただと理解しました。 内容は、エラーでは無く「logger」なのでログだと理解ました。ログの内容は受け取っているクッキーと理解しました。 本来では有れば、iPhoneでもアラートが表示されればクッキーを受け取れているとハズ・・・。 でも、iPhoneではアラートが表示されない・・・。

maruhyper
質問者

補足

アドバイスをありがとうございます。 ASP側のhtmlファイルは自由に作れます。 アドバイス頂いた通り、ASP側(送信側)のhtmlファイルに以下の内容を記述しました。 <script type="text/javascript"> <!-- parent.postMessage(document.cookie, '*'); //--> </script> iframe側(受信側)には、以下の記述をしました。 <script type="text/javascript"> <!-- window.addEventListener('message', function(event){ alert( event.data); }, false); //--> </script> 上記状態で、PC からiframe設置ファイルを開いた所アラートが表示されました。 アラートの内容は iframeを設置しているドメインのURL と 送信側のASPサービス側が出しているエラーみたいで詳細は避けますが、 __utma=、__utmc=、__utmz= の値と思われる値が表示されており、「OK」ボタンを押せばアラートは閉じ、普通に利用出来ます。 上記の状態でiPhoneをiframe設置ファイルを開いも、ページ読み込めませんでした。 以上です。 少し進捗があり手応えを感じられました。 自分なりにもpostMessageを調べてみますが、引き続きアドバイスを頂ければ幸いです。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

safariの仕様は存じませんが… クッキーの代わりに、Web Storageを利用しても同じ制限がかかるのでしょうか?

maruhyper
質問者

補足

アドバイスをありがとうございます。 Web Storage は利用したことが有りません。 ただ、今回はASPの仕様でクッキーを取得しないことにはページを開くことが出来ないです。

関連するQ&A

  • インラインフレームでのクッキーについて

    インラインフレームをサイトで使用しているのですが、 インラインフレームって、更新を押すと、最初に指定したページ  <iframe src=a.html></iframe> だと a.html に戻ってしまうじゃないですか。 それをクッキーを使用して、更新を押しても現在見ているページを表示したいのですが。(クッキーでできるのかな?) できますでしょうか?教えてください。 また、別の方法でも、上記が可能ならば、教えてください。お願いします。 iframe名を、fffff  IDを、fffffid iframeをおくページを、index.html iframeで最初に表示されるページを、a.html リンクでiframe内に表示されるページを、b.html としておきます。

  • クッキーが取得できません

    あるページに<IMG>タグを設置し、SCR属性にPHPページを指定して、そのPHPページでクライアントに保存してあるクッキーを取得したいのですが、思ったようにできません。 クッキーの保存は、上記のPHPページと同じサイトにある別のPHPページで行っています。 <IMG>タグを設置するページは、全く別のサイトです。 SCR属性に指定したURLを直接ブラウザでコールすると、期待どおりクッキーが取得できます。 ファイルへの書き込みやDBへのアクセスなどは問題なくできるのですが、クッキーの取得だけ ができません。 これはセキュリティの関係で、元々できないのでしょうか? どなたかご教授いただけたらと思います。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • URLの取得

    myframeという名前のiframe内に表示されているページのURLを取得するためのスクリプトです。 <SCRIPT TYPE="text/javascript"> <!-- function geturl(){ url = document.myframe.location; } --> </SCRIPT> これを実行した際に、www等のサブドメインが無いURLの場合はURLを取得出来るのですが、サブドメインがあるURLの場合URLが取得出来ませんでした。 原因が分からず困っています。 解決方法を教えていただけますでしょうか。 また、WEBサーバの設定によってはURLが取得出来ないという事はあるのでしょうか? よろしくお願いいたします。

  • クッキーを焼いたり参照したり・・・

    すいません、良かったら教えて下さい。 作成したHTMLのTOPページ(index.htm)にJavascriptで外部スクリプトを作成しました。 <head> <script language="JavaScript" src="java.js"></script> </head> 外部スクリプトで上記のように作成したのですが そのページでセッションで有効なクッキー焼いて、 そのクッキーが登録されてたらその外部スクリプトを読まないようにする方法はどのように作成したらいいのか・・・ 宜しければ、教えていただけないでしょうか? 質問の仕方が難しく説明が下手なのですいませんがぜひよろしくお願いします。

  • クッキーに内容によってリンク先を変えたいです!

    教えてください! トップページでクッキーにnameを保存させて、 他のページに移った際に、そのnameがある場合とない場合で ボタンのリンク先を変えたいのですが、 そんなことできるのでしょうか? また、トップページでクッキーに数値を保存させるのは、 下記を記述しておくだけで、クッキーに保存されるのでしょうか? <SCRIPT type="text/javascript"> <!-- document.cookie = "name = 名前; expires = 期限;" //--> </SCRIPT> 是非教えてください!

  • クッキーについて

    クッキーを考慮し、SESSION管理を使ってスクリプトを作成しています。 webサーバ側に下記phpのスクリプトを設定した場合、 <?php session_name("abc"); session_start(); ?> html ヘッダ情報... ※php.iniにて、クッキーの有効期限を30日に設定。 ※クッキ内容は、 ブラウザ(firefox)の「ツール」→「オプション」→「プライバシー」 →「cookieを表示」ボタンを押して、クッキー名前、内容、有効期限の 確認しています。 ブラウザ側で上記webサーバのホームページにアクセスし、そのホームページで数回リロードを行った場合、リロードするたびにクッキーは、webサーバからブラウザ側へ数回(同じクッキー内容を)送信しているんでしょうか。

    • 締切済み
    • PHP
  • iframeクッキー2

    すみません。解決したと思っていたのに後で確認したところ、出来ていませんでした。 一度削除したのに、またこうやって立てて、申し訳ないです。 何度も試行錯誤しましたがまったくうまくいかなかったので質問させて頂きます。 testページではできたのですが、index.htmlの方にするとうまくいきません。 タグをおいておきます。 ************************* index.htmlの基本とiframe ************************* <html> <head> <title></title> <META>(3行、METAタグをおいています) <link rel="stylesheet" type="text/css" href="/standard.css"> <script language="JavaScript" src="/standard.js"></script> <script> function GetHeightForIndex(){ GetHeight("iframeのID"); } </script> </head> <body onLoad="Clock(),Ref()"> <table ~~~ ~~~ <td valign=top width=87% rowspan=2> <script type="text/javascript"> var cook_key = "iframesrc"; /* クッキーのキーになる適当な名前 */ var cook_src; var cookies = document.cookie.split(';'); for(var i=0; i<cookies.length; i++){ if(cookies[i].indexOf(cook_key) >-1){ cook_src = cookies[i].split('='); break; } } var file = cook_src? cook_src[1] : 'a.htmlにあたるページアド'; (/inde.html なら、 /フォルダ名/a.html のファイルの位置にあります) document.write('<iframe class=tmain src="',file,'" id="iframeのid" name="iframeの名前" frameborder="0" scrolling="no" height="1500"></iframe>') function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } </script> <noscript> <iframe class=tmain src=.htmlにあたるページアド id="iframeのid" name="iframeの名前" frameborder=0 scrolling=no height=1500></iframe> </noscript> </td></tr> </table> </body> </html> ************************* index.htmlのリンク ************************* <a href=c.htmlにあたるページ onclick="setCook(this.href)">掲示板</a> </td><td class=white width=1> <div id="line"></div> </td><td class=white><center> <a href=d.htmlにあたるページ onclick="setCook(this.href)">チャット</a> a.htmlはテーブルリンクを使用しています。 <table ~~~ <td onClick="tmain.location.href='a.htmlにあたるページ',setCook(this.href)" STYLE="cursor:hand;"> ************************* standard.js ************************* 時計や更新日、iframeの高さ可変など~~~ //iframeクッキー var cook_key = "iframesrc"; /* クッキーのキーになる適当な名前 */ window.onload = function(){ if(cook_src) document.getElementById('iframeのID').src = ''; var cook_src; var cookies = document.cookie.split(';'); for(var i=0; i<cookies.length; i++){ if(cookies[i].indexOf(cook_key) >-1){ cook_src = cookies[i].split('='); break; } } document.getElementById('iframeのID'').src = cook_src ? (cook_src[1] ? cook_src[1] : 'a.htmlにあたるページアド') : 'a.htmlにあたるページアド'; } function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } こういう状態なのですがうまく機能されません。 この状態だと、 最初に表示されるa.html  × (表示されない。404になる。) b.thmlの表示と更新しても同じように表示される(クッキー有) ○ c.htmlやd.htmlなど、表示 ○  ↑の状態でを更新をおす。 ×  (a.htmlの最初に表示するときと同じように404) a.htmlのリンクを押す。(a.htmlが表示される) ○ document.write('<iframe class=tmain src="',file,'" id="iframeのid" name="iframeの名前" frameborder="0" scrolling="no" height="1500"></iframe>') の ',file,'の部分をa.htmlにあたるページに直すと、 最初に表示されるa.html、c.htmlとd.htmlを更新した際、共にa.htmlが正常に表示されたので、出来たのかと思ったのですが、 b.htmlで更新を押すと、クッキーが無になり、a.htmlが表示されるようになる。 何度もすみませんが、うまくいかず、困ったので教えてください。 P.S.  b.htmlのようなページを複数にする場合には、 リンクの onclick="setCook(this.href)" をb.htmlのようにしたいページのリンク(aタグ)に入れればいいですよね?

  • iframeクッキー あと少しで

    またしても立ててしまいました。 自分の力ではどうしようも出来ないので、立てたことお許しください。 index.htmlのiframeに最初に表示されているページ a.html index.htmlの<a>タグリンクでiframe内に表示するページの内、  クッキーによって、更新おしてもiframe内を変えないページ b.html・c.html  クッキーを解除し、更新を押すと、a.htmlを表示するページ d.html・e.html 現在、今までの質問で以下のタグでiframeのクッキーを使用しています。 ************************************************************************** index.html ************************************************************************** <head>内  <script language="JavaScript" src="/standard.js"></script>  <script><!--  function GetHeightForIndex(){  GetHeight("tmain");  }  //--></script>  これは、iframeの高さ可変のタグです <body>内  <a href="b.html" onclick="setCook(this.href)">b</a>  <a href="c.html" onclick="setCook(this.href)">c</a>  <a href="d.html" onclick="setCook('')">d</a>   <a href="e.html" onclick="setCook('')">e</a> <script type="text/javascript"><!-- var cook_key = "iframesrc"; if(cook_src) document.getElementById('iframe名').src = 'a.html'; var cook_src; var cookies = document.cookie.split(';'); for(var i=0; i<cookies.length; i++){ if(cookies[i].indexOf(cook_key) >-1){ cook_src = cookies[i].split('='); break; } } var file = cook_src? cook_src[1] : 'a.html'; document.write('<iframe class="tmain" src="',file,'" id="iframeID" name="iframe名" frameborder="0" scrolling="no" height="1500"></iframe>') document.getElementById('tmain').src = cook_src ? (cook_src[1] ? cook_src[1] : 'a.html') : 'a.html'; function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } //--></script> <noscript> <iframe class="tmain" src="a.html" id="iframeId" name="iframe名" frameborder="0" scrolling="no" height="1500"></iframe> </noscript> ************************************************************************** standard.js ************************************************************************** //iframe高さ可変 function getIFrameDocument(aID){ if (document.getElementById(aID).contentDocument){ return document.getElementById(aID).contentDocument; } else { return document.frames[aID].document; } } function GetHeight(ID){ if (document.height) { document.getElementById(ID).style.height = getIFrameDocument(ID).height +20 +"px" ; }else{ document.getElementById(ID).style.height = getIFrameDocument(ID).body.scrollHeight +20 +"px"; } } //iframeクッキー var cook_key = "iframesrc"; window.onload = function(){ } function setCook(arg){ document.cookie = cook_key + '=' + arg + ';'; } user_pref("dom.disable_window_open_feature.scrollbars", true); ************************************************************************** この状態で現在、困っているのは  a.htmlを表示している状態で更新を押すと、iframe内が404になることです。 b.htmlなどで更新を押すと、b.htmlが表示されたままだし、 d.htmlなどで更新を押すと、a.htmlが表示されます。 解決方法教えてくださいっ。

  • クッキーをオンにしているはずなんですが。

    最近、マカフィー・ストアのプログラム自動更新サービス(PCセキュリティスイート プログラム)を購入しました。 ですが、ダウンロードのURLにリンクしても、「クッキーが有効になっていません」というページになってしまいます。 クッキーは、インターネットオプションのプライバシーから、詳細設定で「自動クッキー処理を…」というところと、「常にセッションクッキーを…」というところをオンにしていますし、セキュリティレベルは規定の中にしています。 何度やり直しても、上記ページになってしまいます。 せっかく購入したソフトが使えず、困っています。 どなたかアドバイスをお願いいたします。 バージョンはIE6です。(WinXP)

  • 【html】これは強制クッキーとかでしょうか??

    <iframe src="http://www.amazon.co.jp/exec/obidos/redirect-home/?tag=kclick●●-●●" height="1" width="2" scrolling="no" frameborder="0"></iframe> あるホームページを見ていてかっこいいサイトだな~と思ってソースを参考にしようと思い開いてみると上記のようなタグが埋め込まれていたのですが、これはどういう意味があるのでしょうか? サイト上にはこのリンクは全く表示されていませんでした。 このサイトはアマゾンとは全く関係のないサイトだったのですが、アマゾンのURLが入っていたのですごく気になりました。 ちなみに●の部分は数字が入っていたのですが、何となく個人が特定されそうだったので当て字にしました。 もしかしてこれは強制クッキーとかでしょうか? すいません、どなたかご教授いただけましたら嬉しいです。 よろしくお願い致します。

    • ベストアンサー
    • HTML

専門家に質問してみよう