Javascript WkWebView可以';t打开键盘输入字段

Javascript WkWebView可以';t打开键盘输入字段,javascript,jquery,ios,keyboard,wkwebview,Javascript,Jquery,Ios,Keyboard,Wkwebview,我试图在WkWebView向包含的网页发送javascript函数调用后,使WkWebView以编程方式打开键盘以进行tel文本输入 在这个调用激活了某个输入(id:activeElementToShowKeyboard)之后,出于效率考虑,我希望键盘能够显示上一个tel输入(id:numberInput) 该元素永远不会获得焦点并打开键盘 我理解为什么当一个元素请求焦点时键盘不会自动打开,但我想一定有办法做到这一点 我试过(运气不好): 单击(); 焦点(); 单击().focus(); 快速

我试图在WkWebView向包含的网页发送javascript函数调用后,使WkWebView以编程方式打开键盘以进行tel文本输入

在这个调用激活了某个输入(id:activeElementToShowKeyboard)之后,出于效率考虑,我希望键盘能够显示上一个tel输入(id:numberInput)

该元素永远不会获得焦点并打开键盘

我理解为什么当一个元素请求焦点时键盘不会自动打开,但我想一定有办法做到这一点

我试过(运气不好): 单击(); 焦点(); 单击().focus(); 快速点击 jGestures

这里有一个将在本地运行的示例。在chrome的开发者控制台中,您可以输入名为“文本”的函数;它可以工作,但在iOS上,键盘永远不会在注释掉的警报下打开


试验
.主动{
背景色:红色;
}
$(“.target”).focusin(函数(){
$(.active”).removeClass(“active”);
$(此).addClass(“活动”);
});
函数FunctionCalledByWkWebView(someText){
var$selected=$(.active”).removeClass(“active”);
$selected.val(someText);
var divs=$(“.target”);
var newActiveElement=divs.eq((divs.index($selected)+1)%divs.length.addClass(“活动”);
if($(newActiveElement).is(“#activeElementToShowKeyboard”)){
//警报(“应该打开键盘!”);
$(“#numberInput”).focus();
}
}

WKWebView
仅当焦点由用户启动时才会显示键盘。这是一个bug

这是可以解决的swizzling。但可能会被苹果拒绝

这缓解了问题:

static void (*originalIMP)(id self, SEL _cmd, void* arg0, BOOL arg1, BOOL arg2, id arg3) = NULL;

void interceptIMP (id self, SEL _cmd, void* arg0, BOOL arg1, BOOL arg2, id arg3) {
    originalIMP(self, _cmd, arg0, TRUE, arg2, arg3);
}

Class cls = NSClassFromString(@"WKContentView");
        SEL originalSelector = NSSelectorFromString(@"_startAssistingNode:userIsInteracting:blurPreviousNode:userObject:");

Method originalMethod = class_getInstanceMethod(cls, originalSelector);

IMP impOvverride = (IMP) interceptIMP;

originalIMP = (void *)method_getImplementation(originalMethod);

method_setImplementation(originalMethod, impOvverride);

在iOS 10上,这会导致键盘出现,你知道为什么吗?这会使键盘出现,因为网页正在调用某个字段上的焦点,所以它就像有人在字段中点击一样,这就是旋转的点。