Javascript 在cocoa中加载webview后,div onclick或oncontext仅工作一次

Javascript 在cocoa中加载webview后,div onclick或oncontext仅工作一次,javascript,html,objective-c,cocoa,Javascript,Html,Objective C,Cocoa,目前,我正在开发MacOSX cocoa应用程序。 我正在使用web视图制作一个应用程序。在我的演示应用程序中,我设置了两个按钮和一个webview。两个按钮加载相同的文件。第一次单击div id,但是在第二次加载web视图之后,我没有得到div id。我正在使用web kit for interface方法从javascript调用obj-c方法。我已经应用了许多解决方案,但我无法跟踪这一问题。请尽快给我一个解决方案 我使用了下面的代码来实现web视图 HIIIIIII 嘿 你好 11月7日

目前,我正在开发MacOSX cocoa应用程序。 我正在使用web视图制作一个应用程序。在我的演示应用程序中,我设置了两个按钮和一个webview。两个按钮加载相同的文件。第一次单击div id,但是在第二次加载web视图之后,我没有得到div id。我正在使用web kit for interface方法从javascript调用obj-c方法。我已经应用了许多解决方案,但我无法跟踪这一问题。请尽快给我一个解决方案

我使用了下面的代码来实现web视图


HIIIIIII
嘿
你好
11月7日星期六下午7:38
目标-c

+(BOOL)是Selector Excluded fromWebScript:(SEL)一个选择器
{
if(aSelector==@selector(MsgDivClicked:))返回否;
返回YES;}
-(void)MsgDivClicked:(id)对象
{
NSLog(@“%@Div单击”,对象);
}
这在javascript中的作用域,尤其是绑定DOM事件时。我们可以使用自然单击事件来获取所需的数据,而不是在
onClick
函数中显式传递参数:

你有:


如果我们删除参数,函数调用将有一个作用域,其中
this
是单击的元素。我们还可以替换一个参数
e
,它将是单击的鼠标事件。然后我们可以通过
e.target
获取元素


因为您调用的是ObjectiveC函数而不是JavaScript函数,所以我不确定自然作用域是如何工作的。因此,让我们用一点JS来实现这个技巧:


函数objCClickHandler(e){
window.objcConnector.msgdivi(this.id)
}
您还可以去掉所有onClick处理程序,只需在脚本标记中完成这一切:


Array.from(document.querySelectorAll('.msg')).map(msg=>{
msg.addEventLister('click',e=>{
window.objcConnector.msgdivi(e.target.id)
})
}

你给任何元素加上一个“msg”类后,它们都会连接到你的应用程序中。

这可能是因为你的javascript在你点击后会产生一个错误,并因此在点击后停止工作吗?不确定它的Cocoa方面,但一个可能的原因是DOM发生了变化,并且该事件的事件监听器不再可用附加。如果您可以在web浏览器中对此进行调试,请在第一次单击后打开“开发工具”,并在附加到div的事件侦听器上查看对方法的引用是否仍然存在…另一个原因是元素不再存在或id重复。。。