javascript eval()失败与window.external.notify(),适用于window.alert()

前端之家收集整理的这篇文章主要介绍了javascript eval()失败与window.external.notify(),适用于window.alert()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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()是所有邪恶的根源,并且我已经阅读了其他与post()有关的SO帖子与函数定义. (我们哪里都没有SO?)但这显然是一个不同的问题.

解决方法

我认为这与调用eval(…)的上下文有关.

如果调用eval(“window.external.notify(‘abc’);”),脚本应该在全局窗口上下文中调用.

您可以检查以下内容以引导当前上下文:

eval(“console.log(this); window.external.notify(‘abc’);”)

然后尝试以这3种方式来检查是否有关于上下文的差异.

要指定一个上下文运行,您可以使用call或apply来设置第一个参数的上下文.

猜你在找的JavaScript相关文章