2

最後に、Silverlight アプリ内に PDF コンテンツを表示するための私のハックを、 .pdfに移動する適切な SL5 Trusted In-Browser WebBrowser に置き換えました。

WebBrowserを別の PDFに再移動しようとすると、「登録されていないドロップ ターゲットを取り消そうとしています (HRESULT からの例外: 0x80040100)」というエラーが表示されます。

これは、IIS (ローカルホスト IIS別のサーバー IIS 7.5) にデプロイした場合にのみ発生します... VS2010 での実行中ではありません。

詳細:

UIは極めてシンプル。2 列の 1 グリッド:

カラム 1 カラム 2
======== ====================================== =============================
ツリービュー <WebBrowser x:Name="ContentWebBrowser" Grid.Column="1"></WebBrowser>

ユーザーがツリービューでアイテムを選択すると、次のように呼び出すだけです。

Uri serverUri = new Uri(string.Format("http://{0}:{1}/",
Application.Current.Host.Source.DnsSafeHost,
Application.Current.Host.Source.Port));

var relative= "/Content/x/y/z.pdf"; //This is dynamiclly pulled from Treeview, EDITED FOR SO
Uri relativeUri = new Uri(relative, UriKind.Relative);

ContentWebBrowser.Navigate(new Uri(serverUri, relativeUri));

Cassini が VS2010 経由でデバッガーを使用する場合と使用しない場合の両方で Silverlight を実行すると、リスト ビューでアイテムを次々と選択でき、WebBrowser は上記と同じコードを呼び出して「再ナビゲート」します。しかし、ローカルiisにデプロイすると、2回目にNavigateを呼び出すたびに、次のエラーが発生します。

System.Exception: Trying to revoke a drop target that has not been registered (Exception from HRESULT: 0x80040100)
   at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
   at MS.Internal.XcpImports.WebBrowser_Navigate(DependencyObject obj, Uri source)
   at System.Windows.Controls.WebBrowser.Navigate(Uri source)
   at SystemUtilities.Views.WebContentListView.TreeViewItem_Selected(Object sender, RoutedEventArgs e)

その他の奇妙な点: この例外が表示される前に、3 回または 4 回「再ナビゲート」できる場合があります。SL アプリケーションで別のページをロードすると、このエラーがスローされることがあります。PDFをWebBrowserにロードすると、PDFがキャッシュされているかどうかに関係なく発生します。PDFの代わりに標準のhtmlまたは画​​像を表示すると、これは起こりません。

編集: WebBrowser を再ナビゲートしようとする前に LoadCompleted イベントが発生することを確認するロジックを追加しましたが、問題ではないようです。(100%確実ではありませんが、PDFがまだロードされている可能性があるという事実を無視し、DOMの準備ができていることを知らせるだけだと思います)。ただし、最初の pdf の読み込みが完了したように見えてから長い時間 (30 秒) が必要な場合でも、エラーが発生します。

助言がありますか?


新しいサンプルを skydrive に投稿しました。再現するには、readme をチェックしてください!: http://sdrv.ms/JSn1KB

4

0 に答える 0