WP8 WebBrowser:内联脚本工作,加载不

时间:2012-11-13 21:15:07

标签: webbrowser-control windows-phone windows-phone-8

Windows Phone 8应用程序,WebBrowser控件。我通过NavigateToString加载了一大块HTML(设置IsScriptEnabled=true后)。一段时间后(加载很久之后),我正在使用InvokeScript在页面上调用一些JavaScript。

当我调用在<script>元素内部定义的JavaScript函数时,它按预期工作。当我调用在外部JS文件中定义的文件时,它不会,并且会抛出HRESULT 0x80020006(“找不到名称”)的异常。

外部脚本文件是从我的应用包中加载的。在HTML字符串中,有一个<base>元素,其中包含程序包文件夹的file:// URL(通过Package::Current->InstalledLocation检索),<script>元素只包含文件名。该文件夹中还有样式和图像 - 它们加载正常。

HTML没有DOCTYPE,没有xmlns - 我知道这些东西有时可以抛弃JavaScript。

外部脚本文件有效 - 它直接来自Android,它在相应的WebView控件上工作。无论如何,我试图调用的函数是空的,为了安全起见,JavaScript语法方面。

理论上这可能是某种跨域脚本问题。从技术上讲,脚本来自file:// URL,而页面本身完全没有URL。确保没有调用任何可疑脚本的某些系统代码可能会妨碍它。

3 个答案:

答案 0 :(得分:2)

找到一种解决方法:在加载HTML(LoadCompleted触发)后,在启动时将外部脚本文件加载到字符串中,使用JavaScript eval将其提供给文档。

答案 1 :(得分:1)

以下是如何动态注入一些脚本的示例

Browser.InvokeScript(“eval”,new string [] {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。而不是从文件中读取脚本,您可以传递硬编码字符串等

答案 2 :(得分:0)

您确定要加载脚本吗?你可以做的一件事就是在那里塞一个警报以确保它被加载。我怀疑它没有被装载。

任何时候我都遇到过这种情况,但事实上我还没有从隔离存储中加载JS文件。