如何在WebView Windows 10 UWP中调用javascript
How to invoke javascript in WebView Windows 10 UWP?
我正试图在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);
};
更新我现在可以根据答案中提供的帮助轻松加载简单的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>";
请提出建议。
此功能的文档非常糟糕。我花了一些时间才弄清楚如何在UWP WebView
中调用Javascript
当你第一次看到函数调用webView.InvokeScriptAsync(string,string[])
时,你的最初反应是他们希望函数名作为第一个参数,然后函数paramaeters作为字符串数组。(主要是因为MSDN文档中这样说)
参数
scriptName
类型:System.String[.NET]|平台::String[C++]
要调用的脚本函数的名称。
参数
类型:System.String[][.NET]|平台::数组[C++]
字符串数组将参数打包到脚本函数中。
然而,这是错误的,会导致数小时的头痛。实际上,他们想要的是第一个参数中的单词"eval",然后是一个函数的字符串数组,或者你想要评估的命令
var value = await webViewer.InvokeScriptAsync("eval",
new string[]
{
"functionName(functionParams)"
});
在使用Microsoft API几年后,我确信这不是使用此功能的预期方式,而且有点像黑客。不幸的是,如果你想使用JavaScript,这是我所知道的目前唯一有效的方法。
Anthony,试着检查一下你自己的建议:
await webViewer.InvokeScriptAsync("eval",
new string[]
{
"functionName(functionParams)"
});
或:
await webViewer.InvokeScriptAsync(functionName, new string[]{ functionParameters });
与微软建议的一样,只是你将函数名限制为一个("eval")——这是不必要的。相信我,你可以使用任何函数名,就像我现在使用UWP和以前使用windows手机混合应用程序一样。
这个问题已经有4年的历史了,但我来看看为什么你会得到一个空字符串。
在您的示例中,JavaScript中的函数返回整数,而期望值的类型为字符串。
通过修改这些函数并返回如下字符串:
string htmlFragment = @"<html><head><script type='text/javascript'>" +
"function a(){return '10';};" +
"function b(){return '20';};" +
"function c(){return '30';};" +
"</script></head><body>" +
"<div id = 'myDiv'>I AM CONTENT</div></body></html>";
我们在回来的路上取得了好成绩。
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- node.js:setInterval()正在跳过调用
- 如何在单击复选框后调用控制器方法
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 使用Google Visualization动态调用构造函数
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 调用函数内部的函数
- 函数未在Object.keys或Object.getOwnPropertyNames下列出,但可以调用
- Javascript/jQuery中的并行Ajax调用
- 如何在WebView Windows 10 UWP中调用javascript