UWP Webview InvokeScriptAsync 将错误的参数传递给 JS 函数

UWP Webview InvokeScriptAsync passes wrong argument to JS function

在我的 JS 文件中,我有 handleMessage(message) 函数。 消息参数看起来像 "background=/path;"。

问题是当我调用 InvokeScriptAsync("handleMessage", new[] { "background=/path;" } 我刚刚在 JavaScript 中得到一个 "general" 作为参数。

如果我将 "background" 替换为其他内容,JS 中的参数将是正确的。 此问题仅适用于移动设备。我在桌面上没有问题。

I just got a "general" as argument in JavaScript.

我很好奇你怎么知道你有一个"general",你有没有在你的html上输出你的message?看起来你设置了 background 的文件路径,这里的一个问题是文件路径在 UWP 应用程序中是否合法,因为 UWP 应用程序在沙箱中工作,一些可以在经典桌面应用程序中使用的路径不能'不能在 UWP 中使用。

我无法根据你在 UWP 应用程序和 WP8.1 应用程序中设置的代码重现你的问题,我只是假设你想将图像设置为元素的背景。这是一个示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>WebViewInvoke</title>
    <link href="css/default.css" rel="stylesheet" />
    <script type="text/javascript">
        function handleMessage(message) {
            var element = document.getElementById("textbody");
            element.style.background = message;
        }
    </script>
</head>
<body id="textbody" style="color:black; background:url('Assets/1.jpeg')">
    <div>Content goes here!</div>
    <script src="js/main.js"></script>
</body>
</html>

这是我的html文件,你可以看到我在这个html文件里面调用了函数handleMessage,把这个函数放到js文件里也是一样的.

所以在调用InvokeScriptAsync方法时,我们可以使用Uri获取图片的路径如下:

string[] specs = { "url('Assets/2.jpeg')" };
await webView.InvokeScriptAsync("handleMessage", specs);

基本上这里的主要思路是大家可以尝试用Uri代替你的path,我的图片保存在工程的Assets文件夹中。如果您在这里有任何问题,请更新您的代码并发表评论。