アプリ版:「スタンプのみでお礼する」機能のリリースについて

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件)

__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も取得したいと思っています。

補足日時:2014/07/14 09:52
    • good
    • 0

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を調べてみますが、引き続きアドバイスを頂ければ幸いです。

補足日時:2014/07/12 18:02
    • good
    • 0
この回答へのお礼

補足の修正です。

良く良く見ていたら

>alert( event.data);

ですので、アラートを出して確認していただと理解しました。
内容は、エラーでは無く「logger」なのでログだと理解ました。ログの内容は受け取っているクッキーと理解しました。

本来では有れば、iPhoneでもアラートが表示されればクッキーを受け取れているとハズ・・・。
でも、iPhoneではアラートが表示されない・・・。

お礼日時:2014/07/12 19:16

safariの仕様は存じませんが…



クッキーの代わりに、Web Storageを利用しても同じ制限がかかるのでしょうか?

この回答への補足

アドバイスをありがとうございます。

Web Storage は利用したことが有りません。

ただ、今回はASPの仕様でクッキーを取得しないことにはページを開くことが出来ないです。

補足日時:2014/07/11 17:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!