tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルvb.netから、javascriptのinputタグの追加
記事No9257
投稿日: 2009/08/13(Thu) 14:32
投稿者ペルソナ
先日、投稿させていただきました続きで

VBからhtmlを起動する際
javascriptで作成されたinputタグを
動的にVBから作成したいのですが
方法が分からなく、こまっております。

※TEST.html
<html>
<head>
<script language="JavaScript"><!--

function openWin()
{
 var wd;
 var objForm = document.form1 ;
 var url = "http://localhost/index.asp";-@

 wd = window.open( "",
          "_new",
          "resizable=yes, scrollbars=yes, location=yes, menubar=yes"
         );

 wd.focus();
 objForm.target = "_new";
 objForm.action = url;
 objForm.method = "POST";
 objForm.submit();
}
//--></script>
</head>
<body onload="openWin()">
<form name="form1">
<input type="hidden" name="param1" value="test1">-A
<input type="hidden" name="param2" value="test2">-B
</form>
</body>

※VBソース
Private Sub AxWebBrowser1_DocumentComplete(ByVal sender As Object, ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent) Handles AxWebBrowser1.DocumentComplete

        '以前のオブジェクトを解放
        If Not doc Is Nothing Then
            System.Runtime.InteropServices.Marshal.ReleaseComObject(doc)
        End If

        doc = AxWebBrowser1.Document

        Dim names As mshtml.IHTMLElementCollection

        names = doc.getElementsByTagName("input")

        Dim Ary() As String = InputParam.Split("&")

        For intCnt As Integer = 0 To UBound(Ary)
            Dim input As mshtml.HTMLInputElement = names.item(intCnt)
            input.type = "hidden"
            input.name = Ary(intCnt).Substring(0, Ary(intCnt).IndexOf("="))
            input.value = Ary(intCnt).Substring(Ary(intCnt).IndexOf("=") + 1)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(input)
        Next intCnt

    End Sub

以上は、VBからhtmlの既存のinputタグに値を代入するロジックです。
VBから、TEST.htmlを読み込む際
パラメータとして、script内(@)のurlがを変更する必要がある事と
パラメータの数が可変の為、inputタグ(A・B)を動的に作成する必要が
あるのです。

以上、長くなりましたが
どなたかご教授願います。

[ツリー表示へ]
タイトルRe: vb.netから、javascriptのinputタグの追加
記事No9258
投稿日: 2009/08/13(Thu) 15:16
投稿者魔界の仮面弁士
> 先日、投稿させていただきました続きで
開発環境は、毎回書いてください。
(AxWebBrowser を使っているので、VB.NET の 2002 or 2003 であると推測はできますが)


> javascriptで作成されたinputタグを
> 動的にVBから作成したいのですが
作成されたタグを作成する…とは、どういう意味でしょうか?


> 方法が分からなく、こまっております。
タグを動的に作成するのであれば、
 newTag = doc.createElement("INPUT")
として、これを目的の箇所に appendChild や insertBefore などのメソッドで
登録してやれば OK です。(VB であっても、JavaScript であっても)

下記は、JavaScript での動的生成のサンプルですが、処理の手順は VB でも一緒です。
(この例では INPUT タグではなく、TABLE タグを作成しています)
http://msdn.microsoft.com/ja-jp/library/bb263997.aspx


> パラメータとして、script内(1)のurlがを変更する必要がある事と
その url は、VB から変更する必要があるのでしょうか?
それとも、url の変更は script 側が対応するのでしょうか?


> パラメータの数が可変の為、
いっそのこと、パラメータごとに inputタグを生成していくのではなく、
複数のパラメータを、たとえば「|」なり「,」なりで連結して、
一つのタグの中に押し込めてしまうという運用は駄目でしょうか。


> inputタグ(2・3)を動的に作成する必要があるのです。
それらの、<input type="hidden">の生成は、script と VB の
どちらに担当させたいのでしょうか?

もし、javascript で生成し、それを VB 側から追加操作したいのであれば、
form要素の中のコントロールを列挙するか、または個々の input に id 属性をつけて、
getElementByName メソッドで取得していけば良いかとおもいます。

[ツリー表示へ]
タイトルRe^2: vb.netから、javascriptのinputタグの追加
記事No9260
投稿日: 2009/08/13(Thu) 18:16
投稿者ペルソナ
魔界の仮面弁士さん

ご教授、有難うございます。

> > javascriptで作成されたinputタグを
> > 動的にVBから作成したいのですが
> 作成されたタグを作成する…とは、どういう意味でしょうか?
javascriptのinputタグを、VBから動的に作成したいのです。

> > 方法が分からなく、こまっております。
> タグを動的に作成するのであれば、
>  newTag = doc.createElement("INPUT")
> として、これを目的の箇所に appendChild や insertBefore などのメソッドで
> 登録してやれば OK です。(VB であっても、JavaScript であっても)
> 下記は、JavaScript での動的生成のサンプルですが、処理の手順は VB でも一緒です。
> (この例では INPUT タグではなく、TABLE タグを作成しています)
> http://msdn.microsoft.com/ja-jp/library/bb263997.aspx
有難うございます。
参考にさせていただきます。

> > パラメータとして、script内(1)のurlがを変更する必要がある事と
> その url は、VB から変更する必要があるのでしょうか?
> それとも、url の変更は script 側が対応するのでしょうか?
urlの変更は、VB側が対応させるようにしたいのです。
今、私が行おうとしている事は
VBからストアドプロシージャをコール
ストアドが返してきたパラメータ
例)http://localhost/index.asp?param1=AAA&param2=BBB
このURL(http://localhost/index.asp)を
VBから、TEST.htmlにセット(var url = "http://localhost/index.asp";)

可変のパラメータ(param1=AAA&param2=BBB)を
VBから、inputタグにセット
<input type="hidden" name="param1" value="AAA">
<input type="hidden" name="param2" value="BBB">

> > パラメータの数が可変の為、
> いっそのこと、パラメータごとに inputタグを生成していくのではなく、
> 複数のパラメータを、たとえば「|」なり「,」なりで連結して、
> 一つのタグの中に押し込めてしまうという運用は駄目でしょうか。

> > inputタグ(2・3)を動的に作成する必要があるのです。
> それらの、<input type="hidden">の生成は、script と VB の
> どちらに担当させたいのでしょうか?
説明不足でした。VBから、inputタグを生成したいです。

以上、ご教授、宜しくお願い致します。

[ツリー表示へ]
タイトルRe^3: vb.netから、javascriptのinputタグの追加
記事No9261
投稿日: 2009/08/13(Thu) 20:12
投稿者魔界の仮面弁士
> > > javascriptで作成されたinputタグを
> > > 動的にVBから作成したいのですが
> > 作成されたタグを作成する…とは、どういう意味でしょうか?
> javascriptのinputタグを、VBから動的に作成したいのです。

javasript に「inputタグ」という物はありませんよ。

input は、HTML DOM のオブジェクトであり、それ自体は特定の言語に依存しません。
JavaScript でも VBScript でも VB6 でも VB.NET でも、使い方は一緒です。
(VB から扱う場合には、Microsoft HTML Object Library を参照設定して使うと楽かと)


> > > inputタグ(2・3)を動的に作成する必要があるのです。
> > それらの、<input type="hidden">の生成は、script と VB の
> > どちらに担当させたいのでしょうか?
> 説明不足でした。VBから、inputタグを生成したいです。

であれば、前回の回答(No.9258)の方法で実現できるかと思います。

[ツリー表示へ]
タイトルRe^4: vb.netから、javascriptのinputタグの追加
記事No9262
投稿日: 2009/08/13(Thu) 21:43
投稿者ペルソナ
> javasript に「inputタグ」という物はありませんよ。
> input は、HTML DOM のオブジェクトであり、それ自体は特定の言語に依存しません。
> JavaScript でも VBScript でも VB6 でも VB.NET でも、使い方は一緒です。
そうなのですね...
JavaScriptもhtmlも初心者でして
VBからどのように操作していいものか
分かってないのです。。。

> であれば、前回の回答(No.9258)の方法で実現できるかと思います。
Dim newElement As mshtml.IHTMLElement = doc.createElement("input")
以上で、inputを作成する事は出来たのですが
※test.html
<input type="hidden" name="param1" value="test1">
<input type="hidden" name="param2" value="test2">
の、nameと、valueに値をセット出来ずに
悩んでおります。

Dim names As mshtml.IHTMLElementCollection
names = doc.getElementsByTagName("input")
Dim input As mshtml.HTMLInputElement = names.item(intCnt)
input.type = "hidden"
input.name = "param1"
input.value = "test1"
System.Runtime.InteropServices.Marshal.ReleaseComObject(input)

以上を、newElementオブジェクトを使って
どのように組むのでしょうか?

お手数ですが、ご教授下さい。

[ツリー表示へ]
タイトルRe^5: vb.netから、javascriptのinputタグの追加
記事No9263
投稿日: 2009/08/14(Fri) 00:02
投稿者魔界の仮面弁士
> Dim newElement As mshtml.IHTMLElement = doc.createElement("input")
> 以上で、inputを作成する事は出来たのですが
> の、nameと、valueに値をセット出来ずに
> 悩んでおります。
それは、VB からセットしたいのでしょうか。それとも JavaScript からでしょうか。

VB からセットするのであれば、
  newElement.name = "param1"
  newElement.value = "test1"
と記述するだけで OK です。


なお、作成したタグは、No.9258 にて回答したように、

>>> これを目的の箇所に appendChild や insertBefore などのメソッドで
>>> 登録してやれば OK です。

を行ってください。そうしないと、HTML 中に反映されません。

[ツリー表示へ]