В WP8, если я выполняю (1):
Microsoft.Phone.WebBrowser wb;
wb.InvokeScript("eval", "window.external.notify('abc');");
Он выдает "цель вызова, возвращал ошибку", неизвестную ошибку, hresult 80020101. Но (2)
wb.InvokeScript("eval", "window.alert('abc');");
работает нормально и отображает окно сообщения.
И (3)
wb.InvokeScript("eval", "( function (){window.external.notify('abc');})();");
Также отлично работает.
Мой вопрос: что это такое о window.external.notify(), которое не позволяет eval напрямую ссылаться на него? Это вызов функции, такой как window.alert(), поэтому он должен быть действительным script. Но если в 1) есть что-то особенное в неприкрашенном вызове, то почему обернутый вызов в 3) работает?
Я понимаю, что eval() является корнем всего зла, и я прочитал другие сообщения SO, связанные с проблемами eval() с определением функции. (Где мы все будем без SO?) Но это явно другая проблема.