2016-09-15 30 views
0

私は、Webブラウザコントロールに依存してその情報を表示するカスタムソフトウェア用の「IDE」を開発してきました。このソフトウェアは外部ファイル "common.vbs"を使用して、そのWebページ内の共通機能にアクセスします。アプリケーション内のさまざまなWebページ全体ふりかけhtmlタグである:Vb.Net(ビジュアルベーシック)、Webブラウザコントロール。外部ファイルをページで利用できるようにする

私はリソース文字列にコードをインポートした後、次のコードを試してみた私のアプリケーションでは
<script LANGUAGE="VBScript" src="common.vbs"></script> 

:コードは「doesnの

Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache) 
    sPath = Path.Combine(sPath, "common.vbs") 
    Try 
     Dim fs As FileStream = File.Create(sPath) 
     Dim sData As String = My.Resources.common 
     Dim Info As Byte() = New UTF8Encoding(True).GetBytes(My.Resources.common) 
     fs.Write(Info, 0, Info.Length) 
     fs.Close() 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 

tエラー。私が(同じ機能を使って)ファイルを読んでテストすると、その内容が返されます。私は、ファイルが書き込まれている知っているが、ページのいずれかが上記のHTMLタグを読み込むとき、私はページからエラーを取得:

An error has occurred in the script on this page 
Line: 0 
Char: 0 
Error: Script error 
Code: 0 
URL: about:common.vbs 

私は「含める」しようとしているファイルのみ機能が含まれています以下のようになります。

Function DoHelp 
    window.external.DoHelp "", "", -1, -1 
End Function 

Function SQLDate(d) 
    SQLDate = "'" & DatePart("yyyy", d) & "-" & DatePart("m", d) & "-" & DatePart("d", d) & "'" 
End Function 

Function MonitorJob(jobId) 
    on error resume next 
    window.external.UIControl.MonitorJob jobId, 0 
End Function 

アプリケーション内では、ファイル内に含まれる関数のロードと使用に問題はありません。ファイルの実際の内容はアプリケーションからのものであり、どのマナーでも編集されていません。単純なテストページを含む、ファイルにエラーが含まれているアプリケーションでロードするページ。

Webブラウザーコントロールがスクリプトのscrタグ内から実際のページがロードされ、ホスティングアプリケーションから供給されていないというファイルを認識させる方法はありますか?ソースアプリケーション内のすべてのページを編集することは本当にオプションではありません。動的に作成され、多数存在する可能性があります。

ここにはできるだけ多くの情報を含めるようにしましたが、詳細が必要な場合はお気軽にお問い合わせください。

おかげで、フレッド

EDIT/UPDATE:私はウェブをロードし、その後、同じフォルダに呼び出すHTMLファイルを作成し、一時フォルダに「含める」する必要があるファイルのすべてを書いてみました ファイルストリームを使用した制御。結果は同じです。

EDIT/UPDATE 私は間違っている必要があります。すべての "リソースファイル"をtempフォルダに書き込んだ後、結果のHTMLページを同じファイルに書き出し、最後にNavigateメソッドをそのtempフォルダとファイルに呼び出すと、画像とその下にあるVBSファイルが正しく読み込まれます。

最後に編集/更新 正しく動作するすべての部品を取得するまでにはしばらく時間がかかりました。以下はその問題を解決した答えです。

答えて

0

問題の一部は、Webコントロールの読み込み方法です。文書メソッドを使用すると、ベース位置が使用されないため、ファイルシステムへのアクセスが回避されます。ファイルシステム内のアイテムにアクセスするには、「ソースページ」がファイルシステム内にある必要があります。問題の次の部分は、リソースをファイルシステムに取り込むことでした。以下は私が使用したコードです。重要な注意:デモンストレーションの理由からのみ、Temp Pathのコードはこのルーチン内にあります。それは実際に他のルーチンでアクセスするルーチンの側にあります。

Sub UpdateFiles(sData) 
     'Write all the dependent files into the working folder. 
     Dim sLocalPath As String = Path.Combine(Path.GetTempPath, Guid.NewGuid.ToString) 
     Do While Directory.Exists(TempWorkingPath) Or File.Exists(TempWorkingPath) 
      sLocalPath = Path.Combine(Path.GetTempPath, Guid.NewGuid.ToString) 
     Loop 
     Directory.CreateDirectory(sLocalPath) 
     File.WriteAllBytes(Path.Combine(sLocalPath, "common.vbs"), System.Text.Encoding.UTF32.GetBytes(My.Resources.common)) 
     Dim aImageList() As String = Split(My.Resources.M3ImageList, vbCrLf) 
     Dim sImageList As String = Replace(Join(Split(My.Resources.M3ImageList, vbCrLf), ","), "-", "_") 
     Dim ResourceSet As Resources.ResourceSet = My.Resources.ResourceManager.GetResourceSet(Globalization.CultureInfo.CurrentCulture, True, True) 
     For Each Dict As DictionaryEntry In ResourceSet.OfType(Of Object)() 
      If TypeOf (Dict.Value) Is Drawing.Image Then 
       If InStr(sImageList, Dict.Key, vbTextCompare) > 0 Then 
        Dim ImageConverter As New ImageConverter 
        Dim aBytes() As Byte = ImageConverter.ConvertTo(Dict.Value, GetType(Byte())) 
        Dim sName As String = Replace(Dict.Key.ToString & ".gif", "_", "-") 
        File.WriteAllBytes(Path.Combine(sLocalPath, sName), aBytes) 
       End If 
      End If 
     Next 
     File.WriteAllText(Path.Combine(sLocalPath, "index.html"), sData) 
    End Sub 

私はこのルーチンを駆動するのに必要なすべてのファイルをリストした別個のリソースファイルを使用しました。私がGIFのすべてをインポートしたときの注意点の1つは、「_」が_に変換されたため、replace文です。また、リスト内の項目だけがエクスポートされるように、フィルタ(Instrコマンド)も使用しました。

私はこれに多くの時間を費やしました。他の人には便利だと思います!

フレッド

関連する問題