私はあなたのための2つの提案を持っています。
まず、スクリプトがロードされていない理由は、スクリプトをタイプ 'txt'として指定しているためです。つまり、ローカル/リモートWebサーバー上でスクリプトを提供する場合、スクリプトのMIMEタイプは「text/plain」になり、受け入れられません。名前を適切な 'vbs'拡張子に変更すると、IISはHTAが想定しているMIMEタイプ 'text/vbscript'でファイルを提供します。
また、このようにsetTimeoutを使用すると、スクリプトの内容が100ms以内に正常に読み込まれる必要があるため、脆弱です。ネットワークが遅い場合、コールは失敗します。ネットワークを介して要求しているスクリプトの末尾にあるHello
に電話をかけるほうがよいでしょう。 setTimeout呼び出しを再利用して、スクリプトが正常にロードされたかどうかを確認することができます。 10秒(変数を探して、おそらく?)、そうでなければエラーメッセージを表示します。以下の私の解説では、メイン変数をのscriptタグの前に置き、グローバル変数loaded
がリモートスクリプトから見えるようにしています。
最終的な警告:これをテストしている間、HTAがVBSファイルをキャッシュしていたので、script.vbsを変更したときに、アプリケーションを再ロードしても効果がありませんでした。あなたはこれらのファイルが
は 'でスクリプトを要求するために、あなたのHTAファイル内のいくつかのコードを記述し、キャッシュされませんように
のどちらかに...することは有効期限ヘッダーを設定するには、Webサーバーを設定する必要があると思いますnonce '値の後にキャッシュをオーバーライドします。たとえば、VBScriptの
Randomize
および
Rnd
関数を使用して、
http://localhost/script.vbs?nonce=[RANDOM NUMBER]
を要求します。このようなノンスを持つ静的ファイルを要求するのは、パラメータが無視されるためです。
test.hta:
<html>
<HEAD>
<title>HTA Test</title>
<HTA:APPLICATION SCROLL="yes" SINGLEINSTANCE="yes" WINDOWSTATE="maximize">
<SCRIPT Language=vbscript>
Dim loaded : loaded = False
Sub CheckLoaded()
If loaded Then
MsgBox("Yes, the script loaded.")
Else
MsgBox("Oh dear! The script hasn't loaded.")
End If
End Sub
Sub Window_OnLoad
setTimeout "CheckLoaded", 1000, "VBScript"
End Sub
</SCRIPT>
<script language="VBScript" src="http://localhost/script.vbs"></script>
</HEAD>
<BODY>
</BODY>
</html>
script.vbs:これはGitHubのでホストされているよう
loaded = True
MsgBox("Hello.")
スクリプトのパスは奇妙に見えますか...? – Teemu
'src =" http:// localhost/..."' 'あなたがロードしたいファイルをlocalhost上で実行しているウェブサーバで公開している場合にのみ動作します。' 'file:///' URL、または単純に相対パスを試してください。 –
@Nathan私はあなたに詳細な答えを与えましたあなたに問題が解決したら、それをコメントを残すか、Acceptedとマークして、教えてください。 – BoffinbraiN