3

TWebBrowser コンポーネント (Delphi 7) があり、メモリ ストリームから HTML をロードしました。ページの HTML コードが正常に読み込まれ、ページが正しく表示されます。しかし、「file:///C:/dir/page.html」のようなアドレス (href 属性値) を持つハイパーリンクをクリックしようとすると、何も起こりません。エラー メッセージは表示されず、ブラウザは別のページに移動しようとしません。URL は 100% 正しいです。同じ Web ページを同じ TWebBrowser インスタンスにロードすると、メモリ ストリームではなくハード ドライブ上のファイルから、まさにこのリンクが正常に機能します。何が間違っている可能性がありますか?


次のステートメントを実行しようとしました。

OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_INTRANET, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_TRUSTED, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_INTERNET, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_UNTRUSTED, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_LOCAL_MACHINE, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_LOCAL_MACHINE, 'about:blank', SZM_CREATE));

、しかし、それらは何も変更しませんでした (エラーなしで正しく実行されました。つまり、常に HRESULT = S_OK です)。TWebBrowser は同じように動作しますが、コンポーネントは実際には TEmbeddedWB (SecurityManager プロパティを持っています) であると言わざるを得ません。

一時ディレクトリ内のファイルを使用することに頼ることを考えています。


おかげさまで、一時ディレクトリ内のファイルを使用して、最終的に問題を回避しました。

4

1 に答える 1

1

あなたの質問へ:InternetExplorer自体は間違っています

つまり、IE 7以降、セキュリティ設定を変更せずにfile://の場所以外からロードされたWebサイトからローカルファイルにアクセスすることはできません。すでに述べたように、最も簡単な回避策は、file://の場所からWebサイトを開くことです。ローカルドライブを使用すると、このアクセス権を取得できます。

これについてのいくつかの涙の記事があります:

IE7のローカルフォルダーへのファイルURIリンクが機能しない
http://blogs.msdn.com/b/freeassociations/archive/2005/05/19/420059.aspxhttp://blogs.msdn.com/b/ie/archive
/2005/08/15/452006.aspx

于 2011-04-27T20:51:15.977 に答える