在 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');})();");
也可以正常工作。
我的问题是,阻止 eval 直接调用它的 window.external.notify() 是什么?它是一个函数调用,如 window.alert(),所以它应该是一个有效的脚本。但是,如果 1) 中的简单调用有什么特别之处,那么为什么 3) 中的封装调用会起作用?
我知道 eval() 是万恶之源,并且我已经阅读了其他与 eval() 函数定义问题相关的 SO 帖子。(如果没有 SO,我们都会在哪里?)但这显然是一个不同的问题。