gpt4 book ai didi

javascript - div onclick 或 oncontext 在 cocoa 中的 webview 加载后仅工作一次

转载 作者:行者123 更新时间:2023-12-03 16:01:03 25 4
gpt4 key购买 nike

目前,我正在开发 mac OS X cocoa 应用程序。我正在使用 WebView 制作一个应用程序。在我的演示应用程序中,我设置了两个按钮和一个 WebView 。两个按钮加载相同的文件。第一次点击 div id 时,但第二次加载 Web View 后,我没有获取 div id。我正在使用 web-kit 作为接口(interface)方法来从 javascript 调用 obj-c 方法。我已经应用了许多解决方案,但我无法跟踪它的问题。请尽快给我一个解决方案。 here is the screenshot which displays clicked div id in console first time

我使用下面的代码来实现 WebView

<body>
<div class="xxx">
<table class="xxx">
<tr>
<td class="xxx"><img alt="userimg" src="sdfasdf.jpg" /></td>
<td>
<div class="xxx">
<div class="xxx">
<div class="msg" id="1" onClick="window.objcConnector.MsgDivClicked_(this.id)">Hiiiiiiiii</div>
</div>
<div class="xxx">
<div class="xxx" id="2" onClick="window.objcConnector.MsgDivClicked_(this.id)">Heyy</div>
</div>
<div class="xxx">
<div class="xxx" id="3" onClick="window.objcConnector.MsgDivClicked_(this.id)">Hello</div>
</div>

<div class="xxx">Sat,7 Nov.7:38 PM</div>
</div>

objective-c

+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
{
if (aSelector == @selector(MsgDivClicked:)) return NO;

return YES;}



-(void)MsgDivClicked:(id)object
{
NSLog(@"%@ Div Clicked",object);
}

最佳答案

JavaScript 中 this 的范围 is pretty tricky ,特别是在绑定(bind) DOM 事件时。我们可以使用自然点击事件来获取您想要的数据,而不是在 onClick 函数中显式传递参数:

你有:

<div class="msg" id="1" onClick="window.objcConnector.MsgDivClicked_(this.id)">

如果我们删除该参数,函数调用将具有一个范围,其中 this 是单击的元素。我们还可以替换参数e,它将是单击的MouseEvent。然后我们可以通过e.target获取元素。

<div class="msg" id="1" onClick="window.objcConnector.MsgDivClicked_()">

由于您调用的是 ObjectiveC 函数而不是 JavaScript 函数,所以我不太确定自然作用域是如何工作的。因此,让一点点 JS 来解决这个问题:

<script type="text/javascript">
function objCClickHandler (e) {
window.objcConnector.MsgDivClicked_(this.id)
}
</script>
<div class="msg" id="1" onClick="objCClickHandler()">

您还可以摆脱所有 onClick 处理程序,只需在脚本标记中完成这一切:

<script type="text/javascript">
Array.from(document.querySelectorAll('.msg')).map(msg => {
msg.addEventLister('click', e => {
window.objcConnector.MsgDivClicked_(e.target.id)
})
}
</script>

您为其指定“msg”类的任何元素都将被连接起来,以便点击进入您的应用程序。

关于javascript - div onclick 或 oncontext 在 cocoa 中的 webview 加载后仅工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34312535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com