こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Javascriptの外部サーバーからの読み込み(greybox)

いつも参考にさせていただいてます。
greyboxを使ってページを表示したいのですが、
使っているサーバーはjsファイルなどがアップロードできない、CMSサービスのサイトなので、
別のレンタルサーバーにアップロードしたjsファイルを読み込んで動かしたところうまくいきません。
模範例では、
-----------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>Sample</title>
<link rel="stylesheet" href="greybox/gb_styles.css" type="text/css" media="all">
<script type="text/javascript"><!--
var GB_ROOT_DIR = "./greybox/";
// --></script>
<script type="text/javascript" src="greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/gb_scripts.js"></script>
</head>
<body>
<h1>GreyBox サンプル</h1>
<a href="http://job.mycom.co.jp/" title="job" rel="gb_page[480,360]">
毎日就職ナビのページ表示
</a>
</body>
</html>
-----------------------------------
なのですが、パスを絶対パスに変えて
-----------------------------------
<link rel="stylesheet" href="http://mydomain/greybox/gb_styles.css" type="text/css" media="all">
<script type="text/javascript"><!--
var GB_ROOT_DIR = "http://mydomain/greybox/";
// --></script>
<script type="text/javascript" src="http://mydomain/greybox/AJS.js"></script>
<script type="text/javascript" src="http://mydomain/greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/http://mydomain/gb_scripts.js"></script>
-----------------------------------
と変更しました。
成功例(jsファイル同一サーバー上):http://greybox.main.jp/test_ng/index2.html
失敗例(jsファイル別サーバー上):http://greybox.main.jp/test_ok/index1.html

対応方法をお教え下さい。よろしくお願い致します。

投稿日時 - 2008-06-05 18:17:35

QNo.4077684

困ってます

質問者が選んだベストアンサー

失敗している原因は、クロスドメインの制約によるものです。

別サーバのgreyboxを呼び出しているサーバをサーバ1、別サーバをサーバ2として、
具体的に何が起こっているかを説明しますと、

1.サーバ1のHTMLファイルのリンクをクリックした時にサーバ2のgb_script.js内でiframe要素が作られる
2.iframe要素のsrc属性は、サーバ2のloader_frame.html(greyboxフォルダ内にあります)
3.サーバ2のloader_frame.htmlの7行目でparent.GB_CURRENTにアクセス

ここで、parentはサーバ1のwindowオブジェクトになりますが、クロスドメインの制約により
別サーバのwindowオブジェクトにアクセスすることができません。
なので、loader_frame.html内でGBオブジェクトが作成されず、gb_urlにも値が入らないので
サーバ1のHTMLファイルで指定したURLにジャンプすることができません。

つまり、loader_frame.htmlファイルが別サーバに置かれているとダメなわけです。
gb_script.jsを見てみると、loader_frame.htmlのパスはGB_ROOT_DIRとなりますので、
greyboxフォルダのJavaScriptファイル以外をサーバ1にも置いて、
GB_ROOT_DIRにサーバ1のgreyboxフォルダを指定してやれば動くようになります。
サーバ2には、greyboxフォルダのJavaScriptファイルのみでOKです。

長くなってしまいましたがまとめますと、同一サーバにgreyboxのJavaScriptファイル以外を置いて、
別サーバにgreyboxのJavaScriptファイルだけを置いて、以下のコードを書けば動きます。
(gb_styles.cssを別サーバに置いた場合はそのURLを指定してください。)

<link rel="stylesheet" href="greybox/gb_styles.css" type="text/css" media="all">
<script type="text/javascript"><!--
var GB_ROOT_DIR = "./greybox/";
// --></script>
<script type="text/javascript" src="http://mydomain/greybox/AJS.js"></script>
<script type="text/javascript" src="http://mydomain/greybox/AJS_fx.js"></script>
<script type="text/javascript" src="http://mydomain/gb_scripts.js"></script>

投稿日時 - 2008-06-08 01:30:00

お礼

検証が遅れ、お礼が遅くなり申し訳ありません。
おかげさまで解決致しました。
ありがとうございました。

投稿日時 - 2008-06-16 11:55:24

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問