IE6/XPだとエラーもなく動いたのですが、IE7/VISTAだと上記のエラーが出て困っています。
JavaScriptの知識はありませんので、出来ればズバリの解決法を教えていただければ幸いです。
下記にエラーが出るスクリプトを記載します。
別ウィンドウで選択した「'FONT/K1.swf'」を親ウィンドウに配置された「flash/base」で受け取っています。
<script>
function callASFunction_K1()
{
window.opener.document['base'].setMessage_font('FONT/K1.swf');
window.close();
}
</script>
以上です。よろしくお願いいたします。
IE7から<base>タグの仕様が変更になっているようです。
http://www.microsoft.com/japan/windows/ie/ie7/releasenotes/beta2...
HTMLの方がどうなってるのかいまいち分からないのですが、、、
たぶん、baseタグをhead内に記述して、
function callASFunction_K1()
{
window.opener.document.getElementsByTagName('base')[0].setMessage_font('FONT/K1.swf');
window.close();
}
で、動くのではないかと。
「baseタグをhead内に記述…」とは
以下のようにするだけです。
<html>
<head>
<base></base>(もしくは<base />)
</head>
</html>
で、どうでしょうか??
ありがとうございます。
<base></base>を追加してもうまく動作しませんでした。
IE6でも同じでした。
・「nullまたはオブジェクトではありません」とは、“何が”nullまたはオブジェクトではないのか
(~はnullまたは... という記述の、“~”の部分はデバック時にわりと重要です)
・htmlの方がどうなっているのか(何にどんな名前やidをつけているのか)
・ファイルの階層がどうなっているのか
等の情報が無いため質問に対する適切な回答は困難だと思います。
回答のチャンスが2回しかないため、cttoriさんは知識があってもこれ以上回答する事ができず、歯がゆい気持ちになっているのではないかと思います。
cttoriさんの言いたかった事は、headタグの外側に
<base href="ほにゃらら" />
または
<base href="ほにゃらら"></base>
あるいは
<base href="ほにゃらら">
のような記述があるのではないかと疑っています(多分)
(baseタグは閉じタグ無しでも大丈夫な場合があります。)
IE6以前ではheadタグの外にbaseタグが記述されていても動作したのですが、
IE7ではhead内にないbaseタグは無視されます(多分)。
(cttoriさんはこのIE6とIE7の差異から、baseタグが怪しいと疑っています、多分)
baseタグが効いている場合、例えば "ほにゃらら" の部分が "http://www.google.co.jp" だった場合、
htmlに書かれた他のURL表記は、相対パスで書かれているものは全てgoogleのトップを基準に相対的に示したものとみなされます。
つまり、'FONT/K1.swf' は 'http://www.google.co.jp/FONT/K1.swf' とみなされるというわけです。
これが機能しない事が原因で本来指定していたはずのオブジェクトが取得できないだかなんだかでエラーが起きているのではないかとcttoriさんは推測しています(多分)。
なのでただ単に「<base></base>」だけを追加しても意味はありません。
hrefの中身が重要なので“追加する”のではなく“移動”してください。
(※baseタグがそもそも見つからない場合は原因は別のところにあるという事になります)
あと、前述したように何にどんな名前やらidやらをつけているのかわからないため、
document['base'] のbaseがbaseタグをあらわしているものだと勘違いしたために1のレスのような記述になったのだと思います。
解決方法として
1.知人・友人に聞く
(周囲にこうした知識に長けた人がいれば、その人に聞くとかなり手っ取り早いです)
2.詳細な情報を載せてここのページを閲覧している誰かに頼む
(他人任せで楽かもしれませんが回答チャンスは二回しかないし思惑に齟齬が生じれば話が進まずじれったくなる恐れがあります)
3.デバック方法を調べ、自分で直す
(時間はかかりますがjavascriptに対する知識が増えます)
といったものが挙げられるのではないかと思います。
2ならばhtmlのソースと、何をどうしたいのかなどの情報が必要になると思います。
とりあえず私には
『別ウィンドウで選択した「'FONT/K1.swf'」を親ウィンドウに配置された「flash/base」で受け取っています。』
だけでは何をしようとしているのかわかりません。
(「setMessage_font」でググってもこのページがひっかかるだけなので何をしたいのか私の知識ではわかりません。
念のためsetMessage-fontでも検索しましたが何か違うようなページがひっかかっただけでした)
3ならばまず何行目にエラーが出るのか確認する必要があります。
(今回は該当行は恐らくwindow.opener.document['base']...の行だと思いますが、一般的なエラーについて述べています。
表示された行数は何故か1行ずれる場合があり、信用できる数字ではない場合があるので注意して下さい)
もし原因が何行目なのか見当がつかない場合は、
エラーの記述が何行目なのかをチェックし、ソースの適当な部分に改行を入れてエラー行数が変わったかをチェックし…を繰り返せば、何行目の記述が悪いのかを特定できます。
エラー行数がわかったら、エラー内容が何を意味するのかを考えます。
「nullまたはオブジェクトではありません」というエラーは、宣言していない変数(?)を呼び出した場合に出たような気がします。
つまり宣言部分が書かれているはずのファイルを呼び出そうとして失敗した可能性があるという事でcttoriさんは疑ったわけです(多分)。
どの変数だか宣言だかが悪いのかを特定し、なんとかして解決しましょう。
変数の中身がどうなっているのかをalert関数等を用いて表示すると、エラー原因をつきとめやすい事が多いです。
javascriptの知識が全くなければ、個々の関数の意味をいちいち調べないとどんな処理が成されているのかわからず、“なんとかして解決”が大変だと思いますが頑張りましょう。無理なら人に聞きましょう。
この回答には数々の自信のない記述があり、推測が大きく外れていたり誤った情報が載っている可能性がありますのでご了承下さい。
最後に、自信ないくせに長々と偉そうに書いてしまった事をお詫び申し上げます。
早速のご回答ありがとうございました。
「baseタグをhead内に記述…」とはどのようにしたらよろしいですか?
上記を変更せずに「window.opener.document.getElementsByTagName('base')[0].setMessage_font('FONT/K1.swf');」を
変更したところ、IE6でも動作しなくなりました。
「baseタグをhead内に記述…」が抜けているからだと思うのですが、
記述方法を教えてください。よろしくお願いいたします。