コードの最初のステートメントは、文字列「hello」と「world」を示すアラート ステートメントです。
「hello」でアラートをクリックした場合にのみ、アラート「world」が表示されると思っていました。しかし実際には、アラートの「world」ダイアログは、前の「hello」ダイアログをカバーします。
alert("hello") の後のコードはまったく実行されませんでした。なぜこれが起こったのですか?
private void OnJSCallback(object sender, JSCallbackEventArgs e)
{
//Console.WriteLine("hi");
MessageBox.Show("hi");
if (count == 0)
{
Thread worker = new Thread(func =>
{
Thread.Sleep(3000);
OnReturn("CallFromNative1", "hello");
});
worker.Start();
}
if (count == 1)
{
Thread worker = new Thread(func =>
{
Thread.Sleep(3000);
OnReturn("CallFromNative2", "world");
});
worker.Start();
}
count++;
}
private void OnReturn(string call, string ret)
{
webControl.Dispatcher.BeginInvoke((ThreadStart) delegate()
{
Console.WriteLine("before call javascript");
webControl.CallJavascriptFunction("", call, new JSValue[] { new JSValue(ret)});
});
}
JavaScript コードは次のとおりです。
external.JSCallback("hello", "world");
external.JSCallback("wtf", "dude");
var count = 0;
function CallFromNative1()
{
alert(arguments[0]);
var i = 0;
count = 10;
alert(count);
for(i=0; i<1000; i++)
{
count += i;
}
alert(count);
}
function CallFromNative2()
{
alert(arguments[0]);
alert(count);
}