Обработка функции Javascript onclick в Objetive C - PullRequest
0 голосов
/ 28 марта 2020

У меня есть кнопка внутри веб-просмотра. Когда кнопка нажата, я хотел бы добавить элемент в мой массив исходного кода. Затем при повторном нажатии я хотел бы удалить элемент в массиве. У меня вопрос: чего не хватает в логи c? При нажатии кнопки не вызывается ни userContentController, ни figurePolicyForNavigationAction.

Код JavaScript

<script type = "text/javascript">
 function someFunction(id) {
  if(id = true) {
    document.getELementById("someid").innerText = " some title state 1"
  } else {
     document.getELementById(someid).innerText = " some title state 2"
  }
 }
<script>

Кнопка Html

<button class=someclass id="someid" onclick= "Some.listCallBack()">Add List</button>

Цель C код

TableViewCell.h
@interface TableViewCell : UITableViewCell <WKNavigationDelegate, WKScriptMessageHandler>
@property (nonatomic,strong) IBOutlet WKWebView *webView;

TableViewCell.m

- (void)awakeFromNib {
 [[[self.webView configuration] userContentController]addScriptMessageHandler:selfname:@"someid"];
}
​
- (void)userContentController:(nonnull WKUserContentController *)userContentController 
didReceiveScriptMessage:(nonnull WKScriptMessage *)message {
// i will handle event here 

}

1 Ответ

1 голос
/ 29 марта 2020

Так как фактический обработчик кликов, похоже, не включен в этот вопрос, трудно сказать, в чем именно заключается проблема. Поэтому я мог бы заявить об очевидном, но здесь мы go.

Обработчик (зарегистрированный с -addScriptMessageHandler:name:) выставляется JavaScript как свойство на webkit.messageHandlers. Оттуда межпроцессное взаимодействие более или менее похоже на обмен сообщениями в другом окне, за исключением того, что вместо window.postMessage() мы используем webkit.messageHandlers.handlerID.postMessage(). Другими словами,

function clickHandler() {
    webkit.messageHandlers.someid.postMessage("The message we’d like to pass to our WKScriptMessageHandler");
}

должен делать.

...