スクリプトエラーで外部ファイルを開けない

Webテンプレート HTML+CSSサンプルコード集



0   名前: 初心者 : 2006/01/22 09:10
外部ファイルに下記のスクリプトだけを記述してフォルダに保存したんですが
jsアイコンを開こうとすると「1行目 'document'は宣言されていません」
とエラーが出て開けません。 下記のスクリプトはグーグルサイト内検索の
ものをコピーしたものです。

fa=new Object(document.fm);

function setutf(fx){
bkup=document.charset;
document.charset="UTF-8";
display(fx);
document.charset=bkup;
}

function seteuc(fx){
bkup=document.charset;
document.charset="euc-jp";
display(fx);
document.charset=bkup;
}

function setsjis(fx){
bkup=document.charset;
document.charset="shift_jis";
display(fx);
document.charset=bkup;
}

function display(formx) {
if(fa.new_win.checked==true) {
formx.target="_blank"; formx.submit();
return;
}

category_root=window.open("","category_root","");
formx.target="category_root";
formx.submit(); category_root.focus();
}

function fcs_set() {
document.fm.txt.focus();
}

function search(eng) {
q=document.fm.txt.value;
if(q=="") return;
if(eng=="sitesearch") { fw=document.f_sitesearch; fw.q.value=q; setsjis(fw); }
if(eng=="google") { fw=document.f_google; fw.q.value=q; setsjis(fw); }
if(eng=="yahoo") { fw=document.f_yahoo; fw.p.value=q; fw.action="http://search.yahoo.co.jp/search"; seteuc(fw); }
}

1   名前: m035 : 2006/01/22 09:10  [URL
document、つまりbody内にnameかidがfmなっているものはありますか?
また、onload後に実行するようにした場合はどうですか?
できればbody内のソースもほしいところですが。

2   名前: 匿名希望 : 2006/01/22 09:10
.jsファイルだけを保存しても意味ない(WSHじゃないんだから)
HTML文書から取り込むべし。

3   名前: 初心者 : 2006/01/22 09:10
<FORM name="fm" action="void" onSubmit="search(document.fm.en.value); return false;">

<input type="checkbox" name="new_win" value="" onClick="fcs_set();" id="b1"><label for="b1" style="font-size:8pt;">常に新窓</label>
<select name="en" size="1" onChange="fcs_set();">
<option value="sitesearch">サイト内検索</option>
<option value="google">Google 検索</option>
<option value="yahoo">Yahoo! 検索</option>

<input Type="text" name="txt" size="31" maxlength="255" value="">
<input Type="submit" name="subm" value="検索">
</FORM>
<!-- *************** 検索フォーム *************** -->
<!-- サイト内検索 -->
<FORM name="f_sitesearch" method="GET" action="http://www.google.co.jp/search" Accept-charset="Shift_JIS">
<input type="hidden" name="q" value="">
<INPUT type="hidden" name="sitesearch" value="xx.xxx.com">
<INPUT type="hidden" name="hl" value="ja">
<INPUT type="hidden" name="num" value="20">
<INPUT type="hidden" name="ie" value="Shift_JIS">
<INPUT type="hidden" name="oe" value="Shift_JIS">
</FORM>
<!-- Google -->
<form name="f_google" method="GET" action="http://www.google.com/search" Accept-charset="Shift_JIS">
<input type="hidden" name="q" value="">
<input type="hidden" name="ie" value="Shift_JIS">
<input type="hidden" name="oe" value="Shift_JIS">
<input type="hidden" name="hl" value="ja">
<input type="hidden" name="lr" value="lang_ja">
<input type="hidden" name="num" value="20">
</form>
<!-- ****Yahoo! -->
<form name="f_yahoo" method="GET" action="" Accept-charset="euc-jp">
<input type="hidden" name="p" value="">
</form>
<script src="javascript.js" type="javascript"></script>

これをbodyに書いてます。ヘッダーには日本語Shift_JISを記述してます。

4   名前: m035 : 2006/01/22 09:10  [URL
IE6とFireFox1.5の両方でfa.new_winの判定部分でエラー発生。
新しいウィンドウ開かず。(ポップアップブロックはしていない)
また、新しいウィンドウのチェックにかかわらず、検索は出来ていない様子です。
先頭formのaction="void"でformはsubmitされています。
と、言うよりも、先頭のformしか動作していないと考えられます。
そもそも、同時に二つのformはsubmitできないはずなので
onsubmit(submit処理中)で関数呼び出ししてsubmitは無効かと。
以下は検索用submitをsetTimeoutで遅らせてみる方法です。
つまりは一番上のformのsubmitをreturn falseで無効化した後にsubmitします。
当方では動作しました。
関数displayを以下に置き換えます。
setTimeoutは0で駄目なら適当な値にしてください。
おそらく0で大丈夫だと思いますが。

function display(formx) {
setTimeout(function(){
formx.target=(document.fm.new_win.checked?"_blank":"_top");
formx.submit();
},0);
}

5   名前: 初心者 : 2006/01/22 09:10
関数displayを上記の通り置き換えてみたのですが
今度はjsファイル開こうとすると構エラーで
開けなくなりました。

6   名前: m035 : 2006/01/22 09:10  [URL
提示した関数ついては
IE6および、FireFox1.5ではエラーはありません。
<script src="javascript.js" type="javascript"></script>

<script type="text/javascript" src="javascript.js"></script>
として、headタグ内に記述してみてください。

7   名前: 匿名希望 : 2006/01/22 09:10
>>5
> 今度はjsファイル開こうとすると構エラーで開けなくなりました。
こんな書き方じゃなくて、エラーメッセージは一言一句正確に書くこと。

>>6
細かいツッコミだけどhead「タグ」内に書いちゃいかんわな。

8   名前: 初心者 : 2006/01/22 09:10
display関数置き換える前はjsファイルは開けませんがサイト内検索やgoogle検索は
普通に新規窓が立ち上がり動作するんです。 故にjsファイルの内容は読み込めてる
ことになります。あと、<script type="text/javascript" src="javascript.js"></script>
type="text/javascript"とsrc="javascript.js"を入れかえて検索ボタン
押すとエラーがでました。匿名希望さんの仰る通り
<script src="javascript.js"・・・はヘッダーに記述すると
エラーがでるのでbodyに書く必要があります。


しかしjsファイルが開けないのが問題なのでdisplay関数を置き換えると
行: 29
文字:1
エラー:構文エラーです。
コード:800A03EA
ソース:Microsoft Jscript コンパイルエラー
と出て
formx.submit(); category_root.focus();
のすぐ下の}がエラー扱いされてます。


どうすればいいでしょうか?




 

9   名前: m035 : 2006/01/22 09:10  [URL
よくよく見てみれば確かにscriptは
bodyに書かなければ駄目みたいですね・・・浅はかでした.
問題の部分ですが、
formx.submit();
category_root.focus();
にするとどうですか?
補足として、
function display(formx) {
if(fa.new_win.checked==true) {
formx.target="_blank"; formx.submit();
return;
}

category_root=window.open("","category_root","");
formx.target="category_root";
formx.submit(); category_root.focus();
}
ではチェックボックスに関わらず新規窓が出来てしまうはずです。
function display(formx) {
if(fa.new_win.checked==true) {
formx.target="_blank";
}
else{
formx.target="_top";
}
formx.submit();
}
にするとそのウィンドウで検索内容を表示できるように
チェックボックスで指定できると思います。

10   名前: 初心者 : 2006/01/22 09:10
formx.submit();
category_root.focus();
と修正してみましたがやはり
記事8のエラーと同じ内容のエラーが出てしまい
jsファイルが開けませんです。

いっそjsファイルにせずtxtファイルに戻してHTMLの方に
読みこますようにした方がいいですかねえ?

11   名前: m035 : 2006/01/22 09:10  [URL
>いっそjsファイルにせずtxtファイルに戻してHTMLの方に
>読みこますようにした方がいいですかねえ?
scriptをhtmlに直接書くということでしたら、
それでエラーが直ることはありません。
このスレッドのソースを組み合わせて見ましたが、それ自体ではエラーはありません。
どこかにエラーの原因があるはずです。
js部分のソースをもう一度書き込んでみてください。

12   名前: S : 2006/01/22 09:10
>>いっそjsファイルにせずtxtファイルに戻してHTMLの方に
 拡張子は無関係(拡張子でファイルの中身を判別するというのはMS-DOS時代の名残にすぎない)。
 また、JavaScriptとJScriptは同一のものではないので、「Microsoft Jscript コンパイルエラー」というエラーもありえる(JScriptで使えない機能を使おうとそしているとか)。
 いまいちどJavaScriptそのものについておさらいをすることをおすすめする。

http://www.scollabo.com/banban/java/

一覧へ戻る