【发布时间】:2014-11-08 02:49:03
【问题描述】:
我遇到了一个问题,如果当前窗口页面上的 javascript 触发了焦点,它会从我的插件输入中窃取焦点。有没有办法强制面板中的输入保持焦点。
$(inputSelector).focusout(function(){
$(inputSelector).focus();
});
$(inputSelector).blur(function(){
$(inputSelector).focus();
});
我已经尝试了上述方法,这似乎在我的测试页面上有效,但在我的面板中无效:(。
根据文档 -> https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/panel 将焦点设置为 false 应该
设置为 false 以防止在显示面板时将焦点移开。 仅在必要时将其关闭,以防止可访问性问题。 可选,默认为 true。
我已经这样设置了我的面板。
var text_entry = require("sdk/panel").Panel({
width: text_entry_width,
height: text_entry_h,
focus: false, // doesnt seem to work....
contentURL: data.url("entry.html"),
contentScriptFile: [
data.url("jquery-2.1.1.min.js"),
data.url("text.js")
],
contentStyleFile: [
data.url("styles.css")
]
});
它不会附加将其设置为 false 的工作:(。
任何帮助、指导或 cmets 都会很棒 :) 干杯。
_____________ 更新 _______________________________
我的不好解释似乎有些混乱:(所以我上传了一个视频到 youtube,希望能更好地解释这个问题。
https://www.youtube.com/watch?v=5fhJzpa515Y&feature=youtu.be
还在下面找到更多代码。
面板 Html
<html>
<head></head>
<body>
<div id="resultTableTop" class="resultTable"></div>
<input type="text" id="edit-box"></input>
<div id="resultTableBottom" class="resultTable"></div>
</body>
</html>
热键代码
var showHotKey = Hotkey({
combo: "accel-t",
onPress: function() {
text_entry.show();
}
});
面板 js 显示监听器
self.port.on("show", function onShow() {
$('input').focus();
console.log('hi');
});
希望这现在更清楚了 :) 感谢到目前为止的帮助 :)。
【问题讨论】:
-
Panel在设计上是非模态的。你不能也不应该强迫用户与之交互。 -
这似乎有点傻,我在我的文本框中输入一半,一些 java 脚本成为焦点。我的印象是,您至少可以按照我的 jquery 代码行做一些 hacky。目标不是强迫用户,而是当用户选择与输入交互时,我希望能够将焦点保持在输入上。
-
您的意思是网页脚本从您的面板中窃取了焦点?
-
你可以做到,使用 addon-sdk 是 hacky,使用非 addons-sdk 它不是 hacky。但是,是的,请回答paas q plz。
-
是的,在 sdk 中进行测试期间,如果我的插件集中在搜索栏上打开主页时,搜索栏会窃取焦点(来自网页)。
标签: firefox firefox-addon xul firefox-addon-sdk