Hir*_*dia 17 html javascript cocoa objective-c
目前我正在研究mac OS X cocoa应用程序.我正在使用Web视图制作一个应用程序.在我的演示应用程序中,我设置了两个按钮和一个webview.两个按钮都加载相同的文件 我第一次点击div id,但在第二次加载web视图后,我没有得到div id.我使用web-kit作为接口方法从java脚本调用obj-c方法.我已经应用了很多解决方案,但我无法跟踪它的问题.请尽快给我解决方案.这是屏幕截图,第一次在控制台中显示单击的div id
我使用下面的代码进行Web视图实现
<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>
Run Code Online (Sandbox Code Playgroud)
Objective-C的
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
{
if (aSelector == @selector(MsgDivClicked:)) return NO;
return YES;}
-(void)MsgDivClicked:(id)object
{
NSLog(@"%@ Div Clicked",object);
}
Run Code Online (Sandbox Code Playgroud)
javascript 中的范围非常棘手,尤其是在绑定 DOM 事件时。onClick我们可以使用自然的单击事件来获取您想要的数据,而不是在函数中显式传递参数:
你有:
<div class="msg" id="1" onClick="window.objcConnector.MsgDivClicked_(this.id)">
Run Code Online (Sandbox Code Playgroud)
this如果我们删除该参数,函数调用将具有单击元素的范围。我们还可以替换一个参数e,即单击的 MouseEvent。然后我们可以通过 获取元素e.target。
<div class="msg" id="1" onClick="window.objcConnector.MsgDivClicked_()">
Run Code Online (Sandbox Code Playgroud)
由于您调用的是 ObjectiveC 函数而不是 JavaScript 函数,因此我不太确定自然作用域是如何工作的。因此,让一点点 JS 来解决这个问题:
<script type="text/javascript">
function objCClickHandler (e) {
window.objcConnector.MsgDivClicked_(this.id)
}
</script>
<div class="msg" id="1" onClick="objCClickHandler()">
Run Code Online (Sandbox Code Playgroud)
您还可以摆脱所有 onClick 处理程序,只需在脚本标记中完成这一切:
<script type="text/javascript">
Array.from(document.querySelectorAll('.msg')).map(msg => {
msg.addEventLister('click', e => {
window.objcConnector.MsgDivClicked_(e.target.id)
})
}
</script>
Run Code Online (Sandbox Code Playgroud)
然后,您为其指定“msg”类的任何元素都将被连接起来,以便单击进入您的应用程序。
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |