2

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。一些确保没有调用可疑脚本的系统代码可能会妨碍您。

4

3 回答 3

2

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

于 2012-11-13T22:09:28.817 回答
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。而不是从文件中读取脚本,您可以传递硬编码字符串等

于 2012-11-17T20:35:10.007 回答
0

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

我之前遇到过这种情况的任何时候都是这种情况,尽管我承认我之前没有从独立存储中加载过 JS 文件。

于 2012-11-14T03:29:59.210 回答