2016-04-21 58 views
0

我试图用一个WebView控件以编程方式选择C#Windows应用商店的WebView InvokeScriptAsync选择下拉

<select id="ChooseOption"> 
 
    <option value="Value1">Option1</option> 
 
    <option value="Value2" selected>Option2</option> 
 
    <option value="Value3">Option3</option> 
 
</select>

我试图像下面的代码,但它抛出一个异常HRESULT:第一个InvokeScriptAsync上的0x80020101(坏脚本):

string[] args = 
{ 
    "var chooseOption = document.getElementById(\"ChooseOption\");"+ 
    "chooseOption.selectedIndex = 0;" 
}; 
await WebView.InvokeScriptAsync("eval", args); 
await WebView.InvokeScriptAsync("eval", new string[] { "$('#ChooseOption').trigger('change');" }); 

如果我评论ou,第二个不起作用t第一个InvokeScriptAsync行。使用Chrome控制台我可以做以下,也将努力:

document.getElementById('ChooseOption').selectedIndex; 
$('#ChooseOption').trigger('change'); 

怎样做正确的方式,也可以即使使用的WebView控件来实现?

回答

0

我还没有能够尝试,但我认为你应该在你传递给eval函数的字符串周围添加一些引号。

什么你正试图在这里做可以转化为在网页上是这样的:

eval(var chooseOption = document.getElementById("ChooseOption");chooseOption.selectedIndex = 0;) 

这是无效的。 你可能更想做些什么为:

eval("var chooseOption = document.getElementById(\"ChooseOption\");chooseOption.selectedIndex = 0;") 

(注意:前/后引号)

这相当于下面的调用在C#:

string[] args = 
{ 
    "\"var chooseOption = document.getElementById('ChooseOption');"+ 
"chooseOption.selectedIndex = 0;\"" 
}; 
await WebView.InvokeScriptAsync("eval", args); 

你应该只添加领先/尾随“,所以你的完整字符串将被JS引擎接收为字符串。