如何在 WebView Windows 10 UWP 中调用 javascript?

Kin*_*sar 3 javascript c# webview uwp windows-10-universal

我正在尝试在 WebView 中加载一个 javascript 来进行一些计算并以字符串形式获取输出。我尝试使用以下代码

string htmlFragment = "<html><head><script type='text/javascript'>" +
                    "function doubleIt(incoming){ " +
                    "  var intIncoming = parseInt(incoming, 10);" +
                    "  var doubled = intIncoming * 2;" +
                    "  document.body.style.fontSize= doubled.toString() + 'px';" +
                    "  return doubled.toString());" +
                    "};" +
                    "</script></head><body>" +
                    "<div id = 'myDiv'>I AM CONTENT</div></body></html>";
            htmlView.NavigateToString(htmlFragment);
            htmlView.LoadCompleted += async(s1,e1) =>
              {
                  string result = await htmlView.InvokeScriptAsync("eval", new string[] { "doubleIt(25)" });
                  Debug.WriteLine(result);
              };
Run Code Online (Sandbox Code Playgroud)

更新 我现在可以根据答案中提供的帮助轻松加载简单的 javascript。但是现在当 javascript 中有多个函数时,我遇到了问题,我得到了一个例外。我正在尝试以下代码

string htmlFragment = @"<html><head><script type='text/javascript'>" +
                    "function a(){return 10;};" +
                    "function b(){return 20;};" +
                    "function c(){return 30;};" +
                    "return (a()*b()*c());" +
                    "</script></head><body>" +
                    "<div id = 'myDiv'>I AM CONTENT</div></body></html>";
Run Code Online (Sandbox Code Playgroud)

请建议。

Ant*_*ell 6

此功能的文档非常糟糕。我花了一些时间才弄清楚如何Javascript在 UWP 中调用WebView

当您第一次查看函数调用时,webView.InvokeScriptAsync(string,string[])您的初始反应是他们希望函数名称作为第一个参数,然后函数参数作为字符串数组。(主要是因为 MSDN 文档是这么说的)

参数

脚本名称

类型:System.String [.NET] | 平台::字符串 [C++]

要调用的脚本函数的名称。

争论

类型:System.String[] [.NET] | 平台::数组 [C++]

将参数打包到脚本函数的字符串数组。

然而,这是错误的,会导致数小时的头部撞击。真的,他们想要的是第一个参数中的“eval”这个词,然后是一个字符串数组,或者你想评估的命令

   var value = await webViewer.InvokeScriptAsync("eval", 
      new string[] 
      { 
        "functionName(functionParams)" 
      });
Run Code Online (Sandbox Code Playgroud)

使用 Microsoft API 工作了几年,现在我确信这不是使用此函数的预期方式,而且有点小技巧。不幸的是,如果你想使用 JavaScript,这是我知道目前唯一有效的方法。