C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: VB→JavaScriptの配列渡しについて


(過去ログ 13 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■4066 / inTopicNo.1)  VB→JavaScriptの配列渡しについて
  
□投稿者/ ささきちひろ (1回)-(2007/06/05(Tue) 14:19:21)

分類:[JavaScript] 

VBからIEで表示されているHTML上のJavaScriptのfunctionを叩きたいので
execscriptが使えないかと思っていますが、
引数に配列がある場合、上手くいきません。

代替案など
よい方法をご存知の方がいらっしゃれば
是非、ご教示いただけないでしょうか?



VBSを使った簡単なサンプルを下記に記載しております。


===================================================
test.htm
===================================================

<HTML>
<HEAD><TITLE>テスト</TITLE>
	<SCRIPT>
		<!--
		function test1(arrayList){
			alert(arrayList[0]);
			alert(arrayList[1]);
		}

		function test2(){
			var array = new Array(1);
			array[0] = 'あああああ';
			array[1] = 'いいいいい';
			test1(array);
		}
		//-->
	</SCRIPT>
</HEAD>
<BODY>
<input type="button" onclick="test2();" value="Click">
</BODY>
</HTML>


===================================================
test.vbs
===================================================
	Const TopMenu = "test.htm"
	Dim ary
	Dim objShellWindow 
	Dim iCntWindow
	Dim i

	ary = Array("あああああ","いいいいい")

	Set objShellWindows = CreateObject("Shell.Application").Windows()
	iCntWindow = objShellWindows.Count
	i = 0

	Do
		If i >= iCntWindow Then
			Exit Do
		End If

		If InStr(UCase(objShellWindows(i).LocationURL) , UCase(TopMenu)) <> 0 Then
''			call objShellWindows(i).document.parentWindow.execscript("test2()","VBScript")
			call objShellWindows(i).document.parentWindow.execscript("test1('" & ary & "')","VBScript")   ''← 型が一致しません
		End If
		i = i + 1
	Loop

	Set objShellWindows = Nothing

	Wscript.Quit


引用返信 編集キー/
■4067 / inTopicNo.2)  Re[1]: VB→JavaScriptの配列渡しについて
□投稿者/ 魔界の仮面弁士 (290回)-(2007/06/05(Tue) 14:42:12)
No4066 (ささきちひろ さん) に返信
> ary = Array("あああああ","いいいいい")
> call objShellWindows(i).document.parentWindow.execscript("test1('" & ary & "')","VBScript")   ''← 型が一致しません

「配列」を文字列連結することはできませんので、エラーになるでしょうね。
書くとすれば、
    .execscript("test3 Array(1234, 5678)", "VBScript")
あるいは、
    .execscript("Call test3(Array(1234, 5678))", "VBScript")
のような形となるでしょう。
# VBS では、戻り値を受け取らないメソッド呼び出しでは、括弧を付けない点に注意。


それに、「VBScript の配列」と「JScript の配列」は別物です。
もし、VBScript の配列を、JScript 側で扱うのであれば、
  function test3(arrayOfVBS){
    var vbArray = new VBArray(arrayOfVBS);
    var jsArray = vbArray.toArray();
    test1( jsArray );
  }
のように、VBArray オブジェクトから Array オブジェクトへの変換が必要です。


とはいえ、今回の場合に関して言えば、わざわざ「配列オブジェクト」を渡すのではなく、
    .execscript("Call test4(1234, 5678)", "VBScript")
    .execscript("Call test5(""aa"", ""bb"")", "VBScript")
のように、そのまま引数と渡す形の方が楽かと。

  function test4(){
    var jsArray = new Array(arguments[0], arguments[1]);
    test1( jsArray );
  }
  function test5(a, b){
    test1( [a, b] );
  }

引用返信 編集キー/
■4068 / inTopicNo.3)  Re[2]: VB→JavaScriptの配列渡しについて
□投稿者/ 魔界の仮面弁士 (291回)-(2007/06/05(Tue) 14:46:37)
No4067 (魔界の仮面弁士) に返信
> とはいえ、今回の場合に関して言えば、わざわざ「配列オブジェクト」を渡すのではなく、
> .execscript("Call test4(1234, 5678)", "VBScript")
> .execscript("Call test5(""aa"", ""bb"")", "VBScript")
> のように、そのまま引数と渡す形の方が楽かと。

ちなみに、VBScript などから、
 Call objShellWindows(i).document.parentWindow.test5("あいうえお", Now() )
とか、
 Set delegate = objShellWindows(i).document.parentWindow.test5
 Call delegate("Visual Basic", 6.0 )
のような呼び方もできたりする。
引用返信 編集キー/
■4071 / inTopicNo.4)  Re[3]: VB→JavaScriptの配列渡しについて
□投稿者/ ささきちひろ (2回)-(2007/06/05(Tue) 15:56:06)
No4068 (魔界の仮面弁士 さん) に返信

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

>> .execscript("test3 Array(1234, 5678)", "VBScript")
>> .execscript("Call test3(Array(1234, 5678))", "VBScript")
の形も試してみました。
この場合、エラーとはならないのですが、「undefined」となってしまって、正しく渡せていないようです。

また、JSのfunctionは既存のサイトのものなので、できれば修正したくありません。
可能なら、VB側で何とかならないものかなあと。

※今回のサンプルはVBSですが、実際にはVB2005でやろうと思っています。


引用返信 編集キー/
■4078 / inTopicNo.5)  Re[4]: VB→JavaScriptの配列渡しについて
□投稿者/ 魔界の仮面弁士 (293回)-(2007/06/05(Tue) 19:23:02)
No4071 (ささきちひろ さん) に返信
> >> .execscript("test3 Array(1234, 5678)", "VBScript")
> >> .execscript("Call test3(Array(1234, 5678))", "VBScript")
> の形も試してみました。
> この場合、エラーとはならないのですが、「undefined」となってしまって、正しく渡せていないようです。
一応、当方では正しく動くことを確認しています。
もちろん、渡されるのは VBScript の(というか、COMの) Variant 配列なので、
JScript(≠JavaScript) から使う分には、VBArray オブジェクトの併用が必須ですけれども。
# だからこそ、提示された test1/test2 ではなく、こちらで作成した test3 を呼び出しているわけで。


> また、JSのfunctionは既存のサイトのものなので、できれば修正したくありません。
execScript の第2引数を VBScript にしなければよいのでは?

> ※今回のサンプルはVBSですが、実際にはVB2005でやろうと思っています。
# .NET からだと、COM の扱いが面倒かも…。
引用返信 編集キー/
■4190 / inTopicNo.6)  Re[5]: VB→JavaScriptの配列渡しについて
□投稿者/ ささきちひろ (3回)-(2007/06/08(Fri) 20:23:50)
ご報告が遅くなり、申し訳ありません。

アドバイスいただいた内容にて、確認ができました。

ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -