2

Windows Phone 8アプリ、WebBrowserコントロール。NavigateToString(設定後)を介してHTMLのチャンクをロードしますIsScriptEnabled=true。しばらくして(ロードされてからずっと後)、InvokeScriptを使用してページでJavaScriptを呼び出しています。

<script>要素内でインラインで定義されているJavaScript関数を呼び出すと、期待どおりに機能します。外部JSファイルで定義されているものを呼び出すと、呼び出されず、HRESULT 0x80020006(「名前が見つかりません」)からの例外がスローされます。

外部スクリプトファイルは、私のアプリパッケージからロードされます。HTML文字列には、パッケージのフォルダーへのURL(を介して取得<base>)を含む要素があり、要素にはファイル名のみが含まれています。そのフォルダにはスタイルと画像もあります-それらはうまくロードされます。file://Package::Current->InstalledLocation<script>

HTMLには何もDOCTYPEありませんxmlns-私はそれらのものが時々JavaScriptを捨てることができることを知っています。

外部スクリプトファイルは有効です。これは、それぞれのWebViewコントロールで機能するAndroidから直接取得されたものです。私が呼び出そうとしている関数はとにかく空です。念のため、JavaScriptの構文的には安全です。

これは、理論的には、ある種のクロスドメインスクリプティングの問題である可能性があります。技術的には、スクリプトはfile://URLから取得されますが、ページ自体はURLから取得されません。怪しげなスクリプトが呼び出されないようにするシステムコードの一部が邪魔になっている可能性があります。

4

3 に答える 3

2

1 つの回避策が見つかりました: 起動時に外部スクリプト ファイルを文字列に読み込み、HTML が読み込まれたら (起動LoadCompleted)、JavaScript を使用してドキュメントにフィードしますeval

于 2012-11-13T22:09:28.817 に答える
1

いくつかのスクリプトを動的に挿入する方法の例を次に示します

Browser.InvokeScript("eval", 新しい文字列[] { FileUtils.ReadFileContent("app/www/js/console.js") });

ReadFileContent は次のように定義できます https://github.com/sgrebnov/IeMobileDebugger/blob/master/Libraries/Support/FileUtils.cs

完全な例 https://github.com/sgrebnov/IeMobileDebugger/blob/master/Libraries/IE.Debug.Core/WebPageDebugger.cs

PS。ファイルからスクリプトを読み取る代わりに、ハードコードされた文字列などを渡すことができます

于 2012-11-17T20:35:10.007 に答える
0

スクリプトがロードされていますか? できることの 1 つは、そこにアラートを押し込んで、ロードされていることを確認することです。私の疑いは、それがロードされていないということです。

以前にこれに遭遇したときはいつでもそうでしたが、以前に分離ストレージから JS ファイルをロードしたことはありませんでした。

于 2012-11-14T03:29:59.210 に答える