
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サービスのページを読み込めない状態です。何からヒントになる事でも良いのでアドバイスを頂けると幸いです。
他の方法で解決出来る方法が有れば、合わせてアドバイスを頂けると幸いです。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
__utma、__utmc、__utmzはGoogle Analyticsが出しているCookieですので、cookieそのものは取れていると思います。
ASPサービスが出したCookieだけが取れていないのであれば、ASPサービスのCookieの出し方が標準ではないか、
または、最初のアクセスの場合はCookieは保存されていませんから、まず最初にCookieを保存する必要があるのではないでしょうか。
この回答への補足
アドバイスをありがとうございます。
>__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 …
基本的には同一ドメイン制限を受けません。
送信側(iframe内から親フレームへ)
parent.postMessage(document.cookie, '*');
受信側
window.addEventListener('message', function(event){
alert( event.data);
}, false);
この回答への補足
アドバイスをありがとうございます。
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を調べてみますが、引き続きアドバイスを頂ければ幸いです。
補足の修正です。
良く良く見ていたら
>alert( event.data);
ですので、アラートを出して確認していただと理解しました。
内容は、エラーでは無く「logger」なのでログだと理解ました。ログの内容は受け取っているクッキーと理解しました。
本来では有れば、iPhoneでもアラートが表示されればクッキーを受け取れているとハズ・・・。
でも、iPhoneではアラートが表示されない・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SEO WP内の検索で403エラーが出される問題について 1 2022/11/26 08:46
- オープンソース AWSドメイン名でApacheテスト・ページを表示させる方法を教えて下さい。 1 2023/04/26 15:59
- HTML・CSS Dreamweaver のテンプレートでの相対パスの設定について 2 2023/06/13 17:28
- iPad メモリが16GBのipad proの使い心地は? 1 2022/11/30 11:27
- Chrome(クローム) google earth PROをクリックすると下記の表示がされPROが開きません 2 2022/07/28 10:25
- Chrome(クローム) 最近のGoogle Chromeのデータ読み込みの遅延やエラーって頻発しますか? 2 2023/01/06 22:12
- 大学受験 資格試験などの勉強で過去問題集の解説を理解する時、分からない用語を調べてどうするのが良いですか? 問 3 2023/06/18 17:18
- Excel(エクセル) ExcelのVBAでWordを読み取り専用で開いて、見たいページに自動で移動する方法を教えて頂きたい 4 2022/07/27 10:39
- マンガ・コミック 縦読み漫画は従来の漫画に比べて表現がかなり制限されますか? 上下のみのコマのために コマからコマにキ 4 2022/12/17 11:40
- WordPress(ワードプレス) ワードプレスで、投稿一覧ページにタグを表示する方法 投稿につけたタグを、記事一覧ページにもカテゴリと 1 2023/05/10 21:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptのエラー
-
NNのonloadでは
-
過去の回答にあったJavaScript
-
HPのカテゴリーをツリー表示...
-
JavaScript と VBScript を同時...
-
JavaScript と VBScript を同時...
-
IEにおいてjqueryが動いてくれ...
-
ジャバスクリプトのエラーを直...
-
HtmlからExcelを操作したい
-
JavaScriptのエラー で困ってい...
-
メニューを外部から呼び出したい
-
教えてください
-
javascriptですか?
-
会員向けページ アクセス制限
-
入力チェック
-
初心者向けのjavascript参考書
-
ブラウザからエクセルを開く方法
-
ThickBoxとjavascriptオフユー...
-
IEの右クリックメニューからの...
-
WEBブラウザから任意フォルダを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascript + php でエラー
-
オブジェクトでサポートされて...
-
getElementByIdで謎のエラーが...
-
confirm()をはい/いいえ に切...
-
NetscapeCommunicator4.7でJava...
-
javascriptとHTML
-
ホームページビルダーでスクリ...
-
エラーが出ている箇所を調べるたい
-
PDFフォームで条件つき金額を表...
-
同じ記述でもサブウインドウが...
-
IEで見ると「構文エラー」にな...
-
Syntax errorって?
-
JavaScriptでVBのOption Explic...
-
javascript:void(0)とは何でし...
-
vba ie操作 ボタンを押...
-
初歩的な質問かもしれませんが...
-
HtmlからExcelを操作したい
-
HTAで,親ウインドウを閉じ...
-
Safariではロールオーバーが正...
-
IE9でJavaScriptが動きません。
おすすめ情報