<script language="JavaScript" type="text/JavaScript">
function LinkOpen(myURL){
subwin=window.open(myURL,"","");
}
</script>
<%
For Each elements in RefLink
Response.Write "<a href=""javascript:LinkOpen
('" & RefLink(i) & "')>" & RefName(i) & "</a><br />"
i = i + 1
Next
%>
データベースから配列RefLink()にurlを読み込み、引数myURLと
して別ウィンドウでurlを開きたいのですがうまくいきません。
こんな単純な関数ではダメなのでしょうか?
どなたかご教授をお願いいたします。
--
Takachan
taka...@k3.dion.ne.jp
> データベースから配列RefLink()にurlを読み込み、引数myURLと
> して別ウィンドウでurlを開きたいのですがうまくいきません。
> こんな単純な関数ではダメなのでしょうか?
> どなたかご教授をお願いいたします。
ブラウザの「ソースを見る」で生成されたHTMLをチェックしては
どうでしょうか?
まずはふつうにデバッグしないとね。 久野
???
申し訳ありません。意味不明です。
> <%@ Language=VBScript %>
>
>
> <%
> For Each elements in RefLink
> Response.Write "<a href=""javascript:LinkOpen
> ('" & RefLink(i) & "')>" & RefName(i) & "</a><br />"
> i = i + 1
> Next
> %>
ご覧の通り、動的ファイルをサーバーサイドスクリプトであるVBScriptで
記述していますから、「ソースを見る」で生成されたHTMLファイルには
データベースから読み込んだデータのみが表示されます。
ちなみにこのリンクの部分のショートカットは
javascript:LinkOpen('RefLink')
となります。RefLinkにはurlが格納されています。
この 'RefLink' の値を引数として、JavaScriptのwindows.openに値を引き
渡して実行したがうまくいかない、ということです。
> まずはふつうにデバッグしないとね。 久野
スクリプトデリミタで囲まれたVBScriptの部分をおっしゃっているので
あれば何の問題もありませんし、JavaScript部であればわざわざHTMLを
生成する意味もないはずです。
このあたりは周知であるということを前提としておりましたが、このスク
リプトが何を意味しているのかわからない、ということであればご説明
いたしますが。
--
Takachan
taka...@k3.dion.ne.jp
> ご覧の通り、動的ファイルをサーバーサイドスクリプトであるVBScriptで
> 記述していますから、「ソースを見る」で生成されたHTMLファイルには
> データベースから読み込んだデータのみが表示されます。
データが含まれるHTMLと開くためのリンク群が含まれるHTMLは別の
ものっていうことね? それがよく分からなかったんだけど。
> javascript:LinkOpen('RefLink')
> となります。RefLinkにはurlが格納されています。
それがブラウザで見た場合のソースなのね? それが聞きたかったわけ
なんだけど。で、「RefLink」というURIを開いても無意味でしょ?
javascipt:LinkOpen(RefLink) でないと駄目では? 久野
> javascipt:LinkOpen(RefLink) でないと駄目では? 久野
まず回答ありがとうございます。何度がやってみたのですが結論から言い
ますと、
javascript:LinkOpen('http://localhost/hogehoge.html')
というリンクで、urlの部分を引数として実行したところウィンドウを開く
ことはできました。クォーテーションの有無はとくに問題なさそうですね。
ただどういうわけかまったく同じ環境、同じリンクであってもウィンドウの
開く場合と開かない場合があってまちまちです。ブラウザの「戻る」で戻っ
たり、親ウィンドウを閉じて新たにブラウザを開いたり、クリックの間隔を
変えてみたりいろいろ試してみましたが、どうも一貫した法則性のような
ものが見つかりません。
ただsubjectの疑問は一応解決しましたので、
> > javascript:LinkOpen('RefLink')
> > となります。RefLinkにはurlが格納されています。
>
> それがブラウザで見た場合のソースなのね? それが聞きたかったわけ
> なんだけど。で、「RefLink」というURIを開いても無意味でしょ?
最初の投稿で
> > > > データベースから配列RefLink()にurlを読み込み、引数myURLと
> > > > して別ウィンドウでurlを開きたいのですがうまくいきません。
と、「RefLink()にurlを読み込」むと明記していますが見落とされましたか?
これを「「RefLink」というURI」と解釈するのは記事の内容をよく読んでいな
いか内容をよく理解していない、と取られても仕方ありませんね。
まあハナから素直に javascript:LinkOpen('http://localhost/hogehoge.html') と
した方が良かったのかもしれません。ただこれだとJavaScript側で
function LinkOpen(){
subwin=window.open('http://localhost/hogehoge.html',"",");
}
と記述することと何ら変わりないことになるため、複数のurlによる値渡し処理を
強調するため、あえてサーバーサイドスクリプトで複数の値を読み込む処理を
記述したわけです。
この記述はプログラムをかじったことのある者ならピンとくるものでとくに難解な
記述や奇をてらった内容でもないごくオーソドックスな手法です。必要のない
ツッ込みは「コイツ物知らんな」と思われますからやめておいたほうが無難で
しょう。
--
Takachan
taka...@k3.dion.ne.jp
In article <d5qhib$k7m$1...@caraway.media.kyoto-u.ac.jp>, "Takachan" <taka...@k3.dion.ne.jp> writes
> > > javascript:LinkOpen('RefLink')
> と、「RefLink()にurlを読み込」むと明記していますが見落とされましたか?
> これを「「RefLink」というURI」と解釈するのは記事の内容をよく読んでいな
> いか内容をよく理解していない、と取られても仕方ありませんね。
こういう人っているよね.... 特に御年配の方に..
> javascript:LinkOpen('http://localhost/hogehoge.html')
単純に、single quote のあるなしって考えると理解できないよな~
> 変えてみたりいろいろ試してみましたが、どうも一貫した法則性のような
> ものが見つかりません。
やっぱり変数って何とか、関数って何とか、値って何とか、
そのあたりは避けて通れないんじゃないかなぁ。
RefLink() これは関数で (おそらくはやりたいこと)
javascript:LinkOpen('RefLink') これは RefLink という文字列で、
(おそらくは、望むことと違うこと)
javascript:LinkOpen('http://localhost/hogehoge.html') で、これは文字列
(見えた通りに動くのだが...)
同じ文字列なのに、どうして動かん~ てなところですか。
文字面だけでなく、その背後のメカニズムが見えるようになると法
則性もわかると思う。
もっとも、ServerでJavaScriptを生成して、そのJavaScriptがClient
側で動くていう高階論理てきな動作だから、むずかしいのは確かだ
けど。
---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科
> もっとも、ServerでJavaScriptを生成して、そのJavaScriptがClient
> 側で動くていう高階論理てきな動作だから、むずかしいのは確かだ
> けど。
だからサーブレットに食わすソースじゃなくてサーブレットが生成し
てブラウザに到達した後の奴を貼って欲しいと言っているのだけどね。
その方が絶対に話が早いし確実。 久野
> javascript:LinkOpen('http://localhost/hogehoge.html')
> というリンクで、urlの部分を引数として実行したところウィンドウを開く
> ことはできました。クォーテーションの有無はとくに問題なさそうですね。
いや、上の形で正しくて上の形から「'」を削除したら駄目でしょ?
> ただどういうわけかまったく同じ環境、同じリンクであってもウィンドウの
> 開く場合と開かない場合があってまちまちです。
うーん、<a>タグの開始から最後までそっくりどうなっているかを見
てみたいな。
LinkOpen()の関数定義は今朝の記事のままね? 久野
やれやれ。
「それが何か?」としか返されないような無意味な文章でしかないことを
理解しなさいね。
>
>> javascript:LinkOpen('http://localhost/hogehoge.html')
>
> 単純に、single quote のあるなしって考えると理解できないよな~
はいはい、文字列と変数の違い、っていうことかな?
文字列と変数の違を「クォーテーションの有無」という表現の仕方をする
ことはよくやること、そこはつっ込むとこでもない。
>> 変えてみたりいろいろ試してみましたが、どうも一貫した法則性のような
>> ものが見つかりません。
>
> やっぱり変数って何とか、関数って何とか、値って何とか、
> そのあたりは避けて通れないんじゃないかなぁ。
このセリフがあってその直後に
> RefLink() これは関数で (おそらくはやりたいこと)
とはもう父ちゃん情けなくって涙が出てきます。
VBScriptではこれは関数ではなく動的配列変数を表すんだな。残念ながら。
RefLink(i) やら i = i + 1 やらが一体何を表しているのか、これがどのプロシー
ジャで記述されているのか、JavaScriptなのかそうでないのか。
今一度投稿記事を読み直してみること。
> javascript:LinkOpen('RefLink') これは RefLink という文字列で、
> (おそらくは、望むことと違うこと)
RefLinkが変数であるという前提なら
' + 変数RefLink + '
と同意で、RefLink という文字列という解釈もまったくの的はずれ。
ちなみに配列変数RefLinkに複数のurlを格納して、要素分だけの文字列を
リンクを貼ってHTMLにはき出すという点ではもっとも「望むべきこと」。
これまた見当違い。
> やっぱり変数って何とか、関数って何とか、値って何とか、
> そのあたりは避けて通れないんじゃないかなぁ。
いやまさにその通り。
<a href=""javascript:LinkOpen('" & RefLink(i) & "')>" & RefName(i) & "</a>
を理解すればRefLink が文字列、などという解釈はあり得ないんだよなぁ。
まさに「変数って何か」を君自身が今一度考えるべきところだねぇ。
> javascript:LinkOpen('http://localhost/hogehoge.html') で、これは文字列
> (見えた通りに動くのだが...)
> 同じ文字列なのに、どうして動かん~ てなところですか。
>
> 文字面だけでなく、その背後のメカニズムが見えるようになると法
> 則性もわかると思う。
ちなみに、正常に動いたり動かなかったりするというのはすべて
javascript:LinkOpen('http://localhost/hogehoge.html') という同一のリンクで
検証していて、そちらがズラズラ並び立てているような複数の引数を取っ替え
引っかえやっているワケではない。
#それなら少なくとも「法則性がない」とは言えんだろうに。
何をもって「字面だけを捉えている」と判断しているのか、論理的な解説を
是非とも聞いてみたいところだが。
>
> もっとも、ServerでJavaScriptを生成して、そのJavaScriptがClient
> 側で動くていう高階論理てきな動作だから、むずかしいのは確かだ
> けど。
すべてを理解した上で言う分には格好いいけどねぇ。明らかな理解不足を
露呈しながらこのセリフを見るにつけ思わず清原の某発言を思い出して
しまう。
--
Takachan
taka...@k3.dion.ne.jp
> > > javascript:LinkOpen('RefLink')
> > > となります。RefLinkにはurlが格納されています。
> >
> > それがブラウザで見た場合のソースなのね? それが聞きたかったわけ
> > なんだけど。で、「RefLink」というURIを開いても無意味でしょ?
> >
> > javascipt:LinkOpen(RefLink) でないと駄目では? 久野
変数RefLinkにはurlが格納されます。当然文字列です。これは久野さんのいう
javascipt:LinkOpen(RefLink)
という記述になります。ところが、変数RefLinkに格納されるurlにはクォーテー
ション文字は含まれていません。純粋にurlの文字列だけです。したがって
サーブレットが生成してブラウザに到達したスクリプトは、たとえば変数
RefLinkに格納されるurlが
http://localhost/hogehoge.html
だった場合
javascript:LinkOpen(http://localhost/hogehoge.html)
となります。この引数を文字列とするためにクォーテーションで囲んで
javascript:LinkOpen('RefLink')
と表記したわけです。つまりこの引数は
'RefLink'
という文字列を表しているのではなく
クォーテーション + 変数RefLink + クォーテーション
を表していることになります。
ご理解いただけました?
> うーん、<a>タグの開始から最後までそっくりどうなっているかを見
> てみたいな。
<a href=javascript:LinkOpen('/hogehoge.asp')>クリックして</a>
実際にはaspファイルを引数として仮想ディレクトリで記述しています。
> LinkOpen()の関数定義は今朝の記事のままね? 久野
そうです。
--
Takachan
taka...@k3.dion.ne.jp
> RefLinkに格納されるurlが
> http://localhost/hogehoge.html
> だった場合
> javascript:LinkOpen(http://localhost/hogehoge.html)
> となります。この引数を文字列とするためにクォーテーションで囲んで
> javascript:LinkOpen('RefLink')
> と表記したわけです。
> つまりこの引数は
> 'RefLink'
> という文字列を表しているのではなく
> クォーテーション + 変数RefLink + クォーテーション
> を表していることになります。
なるほど。意図は分かりました。
ところがですねえ… 'RefLink' と書いてしまうと、「'RefLink' という文字列」
という意味になってしまうのですよ、JavaScriptでは。
「クォーテーション + 変数RefLink + クォーテーション」の意味なら、
javasxript:LinkOoen("'" + RefLink + "'")
と書きます。"'" の部分は '\'' でもかまいません。
# Perl なら "'$RefLink'" という書き方ができるんですけどね…
========================================================================
飯嶋 浩光 / でるもんた・いいじま http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta mailto:delm...@ht.sakura.ne.jp
> <a href=javascript:LinkOpen('/hogehoge.asp')>クリックして</a>
これを
<a href="javascript:LinkOpen('/hogehoge.asp')">クリックして</a>
に直すべきなんじゃないかな~ 久野
P.S. ただしそれが原因かどうかはまだよく分かりませんね。JSPが返し
た上記リンクを含むHTMLファイル全体(長すぎれば反復部分は省略
するとして)を見てみたいのだけど…
##### スクリプトはじめ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/l">
<!-- DW6 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<title></title>
<script language="JavaScript" type="text/JavaScript">
<!--
function LinkOpen(myURL){
subwin=window.open(myURL,"","");
}
//-->
</script>
</head>
<body>
<div id="">
【リンク】<br />
<a href=javascript:LinkOpen('/hogehoge.asp')>リンク</a>
</div>
</body>
</html>
##### スクリプトおわり
ちなみにJSPではなくASPの環境です。したがって
Windows.NET Server 2003 評価版 + IIS 6.0 +ASP 3.0
という環境です。
このスクリプトでは正しく動作するようです。
--
Takachan
taka...@k3.dion.ne.jp
> 「クォーテーション + 変数RefLink + クォーテーション」の意味なら、
> javasxript:LinkOoen("'" + RefLink + "'")
> と書きます。"'" の部分は '\'' でもかまいません。
JavaScript側で改めてクォーテーションを追加する処理は行いません。
VBScript側で処理され生成された値を引数として受け取るだけです。
> ところがですねえ… 'RefLink' と書いてしまうと、「'RefLink' という文字
列」
> という意味になってしまうのですよ、JavaScriptでは。
うーん、いきなり 'RefLink' をもってこられればそう解釈するでしょうね。
これはJavaScriptに限らず凡そほとんどのスクリプトにおいてそう。
ただ 'RefLink' については
"Takachan" <taka...@k3.dion.ne.jp> wrote in message
news:d5ouoc$6r$1...@caraway.media.kyoto-u.ac.jp
> となります。RefLinkにはurlが格納されています。
と一応説明しているので、変数として解釈されると思っていたのですが。
クォーテーション + 変数RefLink + クォーテーション
として捉えるにはやはり無理がありましたかねぇ。
--
Takachan
taka...@k3.dion.ne.jp
> <a href=javascript:LinkOpen('/hogehoge.asp')>リンク</a>
HTML的にはやはり「"javascript:LinkOpen('/hogehoge.asp')"」と
囲むべきなわけですが…
> このスクリプトでは正しく動作するようです。
え゛。「開いたり開かなかったり不安定なもの」はまた別なのですか。
その不安定なのを拝見して原因究明してみたいなと思ったのですが。
まあ解決したのなら別によろしいんですが 久野
In article <d5t992$ki2$1...@caraway.media.kyoto-u.ac.jp>, "Takachan" <taka...@k3.dion.ne.jp> writes
> > となります。RefLinkにはurlが格納されています。
> と一応説明しているので、変数として解釈されると思っていたのですが。
> クォーテーション + 変数RefLink + クォーテーション
> として捉えるにはやはり無理がありましたかねぇ。
それを解釈するJavaScript Engine に、Reflection を通して言っ
て聞かせると効果があるかも。Reflection ってのは、本来そうい
うものだったらしいです。
もちろん、実装されているわけはないんだけど。
JavaScript Engine に投稿しているわけではないんだけどね。
あとは応用力の問題かも。
--
Takachan
taka...@k3.dion.ne.jp
この単純明快なスクリプトだけを使うんなら苦労しないんだけどねぇ。
まぁまた不安定な挙動を見せれば投稿しますよ。
--
Takachan
taka...@k3.dion.ne.jp
In article <d5u9at$h9s$1...@caraway.media.kyoto-u.ac.jp>, "Takachan" <taka...@k3.dion.ne.jp> writes
> この単純明快なスクリプトだけを使うんなら苦労しないんだけどねぇ。
> まぁまた不安定な挙動を見せれば投稿しますよ。
次の投稿に期待します!
JavaScript 面白いよね。なんだが、積極的に使う気にはなれず。