我正在将reCAPTCHA集成到我的Cappuccino应用程序中,除了在reCAPTCHA输入文本字段中具有这种奇怪的输入功能之外,其他所有功能都可以正常工作:似乎只有一些键有效,“qwrszcv”和其他几个字母也可以正常工作,但其他大多数键都可以正常工作不工作。
我借用了一些mapkit代码,将reCAPTCHA脚本文件注入(inject)了头部,然后将reCAPTCHA div注入(inject)了我创建的自定义CPView类中。
这是我的构造函数代码:
- (id)initWithFrame:(CGRect)aFrame
{
self = [super initWithFrame:aFrame];
if (self != nil)
{
var DOMScriptElement = document.createElement("script");
DOMScriptElement.src = "http://www.google.com/recaptcha/api/js/recaptcha_ajax.js";
DOMScriptElement.type = "text/javascript";
document.getElementsByTagName("head")[0].appendChild(DOMScriptElement);
needsInitialization = YES;
console.log(self);
}
return self;
}
而我的初始化代码:
- (id)initializeRecaptcha
{
if (needsInitialization)
{
DOMRecaptchaElement = document.createElement("div");
DOMRecaptchaElement.id = "recaptcha_div_id";
var style = DOMRecaptchaElement.style,
bounds = [self bounds],
width = CGRectGetWidth(bounds),
height = CGRectGetHeight(bounds);
style.overflow = "hidden";
style.position = "absolute";
style.visibility = "visible";
style.zIndex = 0;
style.left = "0px";
style.top = "0px";
style.width = width + "px";
style.height = height + "px";
_DOMElement.appendChild(DOMRecaptchaElement);
window.Recaptcha.create("my-recaptcha-key",
"recaptcha_div_id",
{
theme: "clean",
callback: window.Recaptcha.focus_response_field
}
);
needsInitialization = NO;
}
else
{
window.Recaptcha.reload();
}
}
我认为这与 Cappuccino 传播事件的方式有关,但是对于我一生来说,我一直想不出一种使此输入起作用的方法。
最佳答案
Cappuccino 在文档级别附加键事件监听器,以处理键盘快捷键。我不确定为什么有些字符通过了,而另一些字符却没有,但是如果它与潜在的 Cappuccino 键盘快捷键相对应,我也不会感到惊讶。您可能需要检查CPPlatformWindow+DOM.j
以获得更多详细信息。
同时,解决您实际问题的简单方法是将整个Recaptcha小部件放到iframe中(您可以使用CPWebView
或自己制作)。只需记住,在iframe内的事件处理程序中,您可能必须使用[[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
手动泵送事件队列,以使在运行循环之外的代码进行更改后, Cappuccino 可以重新显示。
关于javascript - Cappuccino :在reCAPTCHA输入字段中压缩键盘事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9264600/