在iOS 9之前,确定是否连接外部键盘的最可靠方法是监听UIKeyboardWillShowNotification并将文本字段作为第一响应者,如本问题中所述.使用虚拟键盘时会触发通知,但使用外部键盘时不会触发.
但是,iOS 9现在已经改变了这种行为,UIKeyboardWillShowNotification当连接外部键盘时也会触发,因为现在显示了新的键盘工具栏.
仍然可以检测键盘高度并判断它是较小的工具栏还是正在显示的较大的虚拟键盘.然而,这种方法是不可靠的,因为键盘高度在各种beta之间已经改变,并且不能指望随着时间的推移保持不变.
有没有更可靠的方法可以用于iOS 9?
我正在构建一个Chrome扩展程序,允许用户管理应用程序(网站)的打开选项卡.清单是:
{
"manifest_version": 2,
"name": "AT Tabs",
"version": "0.1",
"permissions": ["activeTab", "tabs"],
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["main.js"]
}]
}
Run Code Online (Sandbox Code Playgroud)
但是当我在main.js文件中执行此操作时:
console.log(chrome.windows);
我在控制台中未定义...任何想法为什么?我有两个选项卡和activeTab作为权限,并且扩展程序正在开发人员模式下运行.
我正忙着在谷歌Chrome扩展程序内部进行通信,并使用以下指南:https://developer.chrome.com/extensions/messaging
它曾经工作,但我遇到了一个错误:
响应tabs.query时出错:TypeError:无法读取未定义的属性"id"
我比较了我的代码和谷歌Chrome代码,我似乎无法找到我的代码产生错误的原因:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[1].id, {fen: request.needMove}, function(response) {
//console.log(response.farewell);
});
});
Run Code Online (Sandbox Code Playgroud)
这是我发送到的地方:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log("recv FEN : " + FEN);
FEN = request.fen;
setCookie("FEN_SET", "true" , 1);
setFEN(FEN);
});
Run Code Online (Sandbox Code Playgroud)
我无法解决这个错误,无论我尝试它保持不变."无法读取未定义的属性"暗示"标签"是未定义的,据我所知,但我不明白为什么它在Google示例中有效,而在此处则不然.
另一个问:
如果我试图将它发送到标签[1]这是否意味着它是第二个位置的标签,还是我解释错了?
javascript jquery google-chrome communication google-chrome-extension