【问题标题】:WP8 WebBrowser: inline script works, loaded doesn'tWP8 WebBrowser:内联脚本有效,加载不
【发布时间】:2012-11-13 21:15:06
【问题描述】:

Windows Phone 8 应用,WebBrowser 控件。我通过NavigateToString(在设置IsScriptEnabled=true 之后)加载了一大段HTML。一段时间后(加载很久之后),我使用 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。一些确保不会调用可疑脚本的系统代码可能会受到阻碍。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这里是如何动态注入一些脚本的例子

      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

      附言。而不是从文件中读取脚本,您可以传递硬编码字符串等

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-15
          • 2016-10-03
          • 1970-01-01
          • 2013-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多