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。确保没有调用任何可疑脚本的某些系统代码可能会妨碍它。
答案 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文件。