在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()一样,所以应该是有效的脚本。但如果在1)中的未装饰调用有特殊之处,那么为什么在3)中的包装调用能够工作呢?
我知道eval()是万恶之源,我也阅读过其他与eval()和函数定义相关的SO帖子。(没有SO我们都会怎样呢?)但这显然是一个不同的问题。