【问题标题】:invokescriptasync HRESULT: 0x80020101' script runs fine in chrome and IEinvokescriptasync HRESULT: 0x80020101' 脚本在 chrome 和 IE 中运行良好
【发布时间】:2018-02-26 16:11:43
【问题描述】:

我仍在尝试使 invokescriptasync 工作。我正在 facebook.com 上尝试以下测试,但失败并显示 HRESULT: 0x80020101' 这通常意味着脚本中有错误,但我尝试在 Chrome 和 IE 中运行简单的 javascript 没有任何问题。

private async void WebView_OnNavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
{
     await _webView.InvokeScriptAsync("eval", new[]
     {
         "document.getElementById('blueBarDOMInspector').innerHTML = '';"
     });
}

谢谢

【问题讨论】:

  • 你能调用任何脚本吗?
  • 我可以调用脚本:“window.external.notify('something');”但它不会引发事件 ScriptNotify 这是另一个问题:-(

标签: webview uwp


【解决方案1】:

我已经测试了您的代码,只有在找不到 blueBarDOMInspector 的情况下才会引发错误。我使用了以下简单的 HTML:

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<p id="blueBarDOMInspector"></p>
</body>
</html>

您可以确认脚本在此 HTML 中按预期工作。所以我怀疑问题出在 HTML 方面而不是 UWP 方面。

至于ScriptNotify 不工作 - 该网站必须是 HTTPS 并被添加为受信任的 appxmanifest。更好的解决方案是网络允许对象。一个很好的例子作为示例项目发布在问题yesterday on SOhere 中。基本上,您必须创建一个带有标记为[WebAllowed] 的类的Windows 运行时组件,然后使用AddWebAllowedObject 方法将其注入WebView

【讨论】:

    【解决方案2】:

    对于您调用 JavaScript 代码的问题,我检查了您的代码,很简单,可能是 'blueBarDOMInspector' 对象,请确保当 OnNavigationCompleted 为被解雇了。

    第二个问题:

    我可以调用脚本:“window.external.notify('something');”但它不会引发另一个问题的事件 ScriptNotify :-(

    请查看document:

    要使外部网页能够在调用 window.external.notify 时触发 ScriptNotify 事件,您必须在应用清单的 ApplicationContentUriRules 部分中包含该页面的统一资源标识符 (URI)。

    【讨论】:

    • 我在 Facebook 网站上,我检查了该网站的 id(仅用于测试)。 Edge 引擎是否会影响通过 Webview 查看的页面的标记?
    • @MusicAndCode 我建议您可以在页面加载时在按钮的单击事件中调用您的 javascript 代码,而不是在 OnNavigationCompleted 中执行此操作。如果这可行,则意味着当OnNavigationCompleted 被触发时,'blueBarDOMInspector' html 元素不存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 2013-03-29
    • 2014-04-17
    • 2014-12-25
    • 2013-04-23
    相关资源
    最近更新 更多