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
文件夹中。如果您在这里有任何问题,请更新您的代码并发表评论。
在我的 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
文件夹中。如果您在这里有任何问题,请更新您的代码并发表评论。