2017-12-22 58 views
0

私は新しいHTAファイルをリリースするために外部の場所からスクリプトを読み込もうとしていますが、新しい機能を追加していくうちに動的に読み込むことができます。私はIISを使用して自分のPC上でスクリプトファイルをローカルにホストしているときに動作させることができます。私は外部からそれをホストしようとしているときしかし、私は次のエラーを取得する(私はこれまでのGitHubを試してみました):HTAの外部VBScript

  • ライン:1
  • のChar:1
  • エラー:「型の不一致:「こんにちは「」
  • コード:0
  • URL:

私のようなものを持っています

と、サーバー上のSCRIPT.TXTに:

Sub Hello 
    MsgBox("Hello.") 
End Sub 
+0

スクリプトのパスは奇妙に見えますか...? – Teemu

+1

'src =" http:// localhost/..."' 'あなたがロードしたいファイルをlocalhost上で実行しているウェブサーバで公開している場合にのみ動作します。' 'file:///' URL、または単純に相対パスを試してください。 –

+0

@Nathan私はあなたに詳細な答えを与えましたあなたに問題が解決したら、それをコメントを残すか、Acceptedとマークして、教えてください。 – BoffinbraiN

答えて

0

私はあなたのための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.") 
    
  • +0

    ファイル拡張子を変更しても、raw.github.Testing関数を呼び出す前に外部ファイルがロードされていることを確認してください。ローカルのIISを使用してファイルをホストしているときにはうまくいきます。ちょっとしたことがあります。 – Nathan

    +0

    @ Nathanあなたは、生のファイルを要求するときにGithubサーバから返されてくるものを調べる必要があります。MIMEタイプが 'text/vbscript'でなければ、単に動作しません。そうする。 – BoffinbraiN

    関連する問題