2016-04-21 48 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引擎接收爲字符串。

相關問題