ここから本文です

HTML からスクリプトを実行する ↓ <HTML> <HEAD> <TITLE>ABC 実行</TITLE> <s...

tec********さん

2019/3/1323:16:20

HTML からスクリプトを実行する

<HTML>
<HEAD>
<TITLE>ABC 実行</TITLE>
<script language="VBScript">

Sub ABC()
・・・
End Sub
</script>
</HEAD>
<BODY>
<button onclick="vbscript:Calc()">ABC 実行</button>
<BODY>
</HTML>

このように書いて、 ボタン【ABC 実行】 を押させますが、
ボタンを省略し、
このHTMLファイルを開いたら、直ちに実行させるには、
どのように書いたらいいですか?

補足また、このスクリプトを外部ファイルにして、
HTMLファイルに取り込むには、
どのようにしますか?

閲覧数:
92
回答数:
1

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

glo********さん

2019/3/1418:58:35

> HTMLファイルを開いたら、直ちに実行させるには、


単純に書けば Sub 内に動作を入れるから
HTMLファイルを開いたときに実行されないのです。

Sub など元から書かなければ良いのです。


◎【例1】とりあえず Sub を書かない HTML 全文例

<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=10">
<meta charset="shift_jis">
<title>ABC 実行 Ex.1</title>
<script type="text/vbscript">

Dim MyStr
MyStr = "あいう"
MsgBox MyStr

</script>
</head>
<body>
</body>
</html>


  
--- --- ---

しかし,
「どうしても動作を Sub 内に入れたいんだ!」
という場合はその「Sub ABC を実行せよ」という
1文を入れる必要があります。


◎【例2】Sub を定義した上で即実行させる HTML 全文例

<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=10">
<meta charset="shift_jis">
<title>ABC 実行 Ex.2</title>
<script type="text/vbscript">

Sub ABC()
    Dim MyStr
    MyStr = "あいう"
    MsgBox MyStr
End Sub

ABC '← ABC を実行

</script>
</head>
<body>
</body>
</html>


  
--- --- ---

ただし,
次のように書いた場合は本当に HTML を開いたとき
すなわち
DOMツリー構築前に動作が実行されるので失敗します。


◎【例3】DOMエレメントが取得できず "失敗する" HTML 全文例

<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=10">
<meta charset="shift_jis">
<title>ABC 実行 Ex.3 (NG)</title>
<script type="text/vbscript">

Dim MyStr
MyStr = document.getElementById("MyPrg").innerText
MsgBox MyStr

</script>
</head>
<body>
<p id="MyPrg">あいう</p>
</body>
</html>


  
--- --- ---

上の【例3】のような失敗を防ぐ手段としては
「HTMLファイルを開いたときに実行」するのではなく
「DOMツリー構築を待ってから実行」するような必要が出てきます。


◎【例4】DOMツリー構築直後に動作を実行する HTML 全文例

<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=10">
<meta charset="shift_jis">
<title>ABC 実行 Ex.4 (OK)</title>
<script type="text/vbscript">

Sub window_onload()
    Dim MyStr
    MyStr = document.getElementById("MyPrg").innerText
    MsgBox MyStr
End Sub

</script>
</head>
<body>
<p id="MyPrg">あいう</p>
</body>
</html>


  
--- --- ---

もっとも上の【例4】では
Sub ABC という名を無視しています。
これを生かしたい場合は次のようにしても良いでしょう。


◎【例5】DOMツリー構築後に動作を実行する HTML 全文例

<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=10">
<meta charset="shift_jis">
<title>ABC 実行 Ex.5</title>
<script type="text/vbscript">

Sub ABC()
    Dim MyStr
    MyStr = document.getElementById("MyPrg").innerText
    MsgBox MyStr
End Sub

Sub window_onload
    ABC
End Sub

</script>
</head>
<body>
<p id="MyPrg">あいう</p>
</body>
</html>


  
===========================


> このスクリプトを外部ファイルにして、
> HTMLファイルに取り込むには、


【例5】のスクリプトを外に出すものとします。

その出したスクリプトのファイル名を「sample.vbs」とし
HTML と同じフォルダに置くものとします。


◎【例6】外部 vbs をロードする HTML 例

<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=10">
<meta charset="shift_jis">
<title>ABC 実行 Ex.6</title>
<script type="text/vbscript" src="sample.vbs"></script>
</head>
<body>
<p id="MyPrg">あいう</p>
</body>
</html>


  
・「sample.vbs」内のスクリプト例

Sub ABC()
    Dim MyStr
    MyStr = document.getElementById("MyPrg").innerText
    MsgBox MyStr
End Sub

Sub window_onload
    ABC
End Sub


  
===========================

【補足】

一体どれだけ古い環境で試されているのかは知りませんが
IE11 ではデフォルトで VBScript など動きませんよ。

当方は IE11 で動作検証したため
<head></head> 内の最初に
<meta http-equiv="x-ua-compatible" content="IE=10">
のような互換モード表示用の一文が要ります。
別に
<meta http-equiv="x-ua-compatible" content="IE=8">
などにしてもかまいませんが。

Windows Vista(最終版 IE9) や
Windows XP(最終版 IE8) の使用は
もうそろそろ避けた方が良いと思います。

というか
ブラウザ用の VBScript は IE でも見放された言語。
HTA で使うならまだしも
HTML で VBScript を使おうとする方針は
早くやめた方が良いように思います。
(ブラウザ用の VBScript など,わからなければわかる必要なし。)


  
それとついでに

「Internet Explorer 10 の VBScript では window_OnLoad などで大文字小文字が混在できない」
https://support.microsoft.com/ja-jp/help/2820413

&gt; HTMLファイルを開いたら、直ちに実行させるには、


単純に書けば Sub 内に動作を入れるから...

  • 質問者

    tec********さん

    2019/3/1512:50:27

    ありがとうございます。
    なかなか複雑です。

    やはり、 JavaScript がベストですか?

    でもこういう問題もあります、、、
    https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q142049239...
    時刻を表示する HTMLファイルです。
    <script> があると、IE では、警告が出て必ずクリックしないと進まず、
    時刻が表示されません。 これはどうにかなりませんか?
    Chrome や、 Microsoft Edge では警告なく、動きます。
    一方<bgsound src="C:\Windows … は、ieだけの仕様で、 他では
    音は出ません。

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる