如果按下“F2”,我想打开新窗口。下面的代码在 Firefox 中给出了 newWindow is null 错误消息。如果我不使用弹出窗口阻止程序,它就可以工作。在 IE 中也一样。即使启用了弹出窗口拦截器,它也可以在 chrome 中运行。
hotkeys: {
"f3" : function () {
url = "http://www.vse.cz";
var newWindow = window.open(url, '_blank');
newWindow.focus();
return false;
},
问题 1:我能否让它适用于所有浏览器,以便用户在使用热键插件时不必更改其设置?
问题 2: 为什么 Using JavaScript instead of target to open new windows 在 firefox 中运行没有任何问题?那是因为它是一个链接而不是使用热键插件吗?
我的理解是上面页面的脚本不知何故 操纵发生的事情 当用户点击链接时。它改变了点击的属性,所以 浏览器“不知道”这是新窗口,所以弹出窗口拦截器是 绕过。
在我的例子中,我使用由其他东西触发的纯 js 函数,而不是 用户点击。而且“我的功能”不会更改任何 html 对象的属性。我想这就是区别。我不确定我是不是 就在这里。
最佳答案
不幸的是,您无法通过按键打开新窗口(除了禁用弹出窗口阻止程序)。
IE、Firefox 和 Chrome 中的弹出窗口阻止程序(从高层次上)的工作方式是浏览器(在遇到对 window.open 的调用时)沿着 JavaScript 调用堆栈向上移动以确定当前函数是否是——或者被一个函数调用——一个事件处理程序。换句话说,它会查明当前函数是否正在执行,因为用户执行了触发 DOM 事件的操作。
如果是,则允许弹出;否则它被阻止。但是,哪些事件符合“允许弹出”的条件因浏览器而异。 By default in Mozilla , 只有 change , click , dblclick , mouseup , reset , 和 submit资格。 (我假设 IE 是相似的。)
函数是任何其他类型事件的事件处理程序——例如 keydown/keyup/keypress在你的情况下——不有资格接受特殊的弹出窗口允许处理,这意味着你的弹出窗口被阻止,这就是你调用 window.open 的原因返回 null .
但是,Chrome 会考虑 keydown事件符合允许打开弹出窗口的条件,这就是您的脚本在该浏览器中运行的原因。
Here's a reduced example演示这是如何工作的。这个演示:
spawn() 的函数这叫window.open打开一个弹出窗口。spawn()页面加载后立即。这被所有浏览器阻止,因为调用是从全局范围进行的;它不是从事件处理程序中调用的。window.onkeydown这叫spawn() .如果您在 Chrome 中按任意键,弹出窗口将打开,因为它允许来自 keydown 的弹出窗口处理程序。在 IE 和 Firefox 中,弹出窗口将被阻止,因为这些浏览器不允许来自键盘事件的弹出窗口。spawn() 的链接.当您单击该链接时,所有浏览器都将允许弹出窗口,因为调用了 window.open。可以追溯到 click 的事件处理程序事件。正如您现在看到的,没有任何操作可以操纵事件属性或“欺骗”浏览器使其不知道有一个新窗口。允许通过链接点击打开弹出窗口的行为是设计的,理论是如果您点击了某个内容,您很可能想要看到任何内容在弹出窗口中。但是,当调用电话时 window.open从您未执行任何操作的地方(例如全局范围),您可能对自动启动的弹出窗口中的任何 [ad] 不感兴趣。
通过这种方式,弹出窗口拦截器可以防止烦扰(自动启动广告),同时仍允许页面根据用户请求打开弹出窗口。
关于javascript - 即使弹出窗口被阻止,热键插件也会打开新窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6094613/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我有这个代码File.open(file_name,'r'){|file|file.read}但是Rubocop发出警告:Offenses:Style/SymbolProc:Pass&:readasargumenttoopeninsteadofablock.你是怎么做到的? 最佳答案 我刚刚创建了一个名为“t.txt”的文件,其中包含“Hello,World\n”。我们可以按如下方式阅读。File.open('t.txt','r',&:read)#=>"Hello,World\n"顺便说一下,由于第二个参数的默认值是'r',所以这样
您认为可以作为插件很好地存在于您的Rails应用程序中必须实现的哪些行为?您过去曾搜索过哪些插件功能但找不到?哪些现有的Rails插件可以改进或扩展,如何改进或扩展? 最佳答案 我希望在管理界面中看到一个引擎插件,它提供了应用程序中所有模型的仪表板摘要,以及可配置的事件图表。 关于ruby-on-rails-您希望看到哪些Rails插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio
我想用这两种语言中的任何一种(最好是ruby)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生
我花了几天时间尝试安装ruby1.9.2并让它与gems一起工作:-/我最终放弃了我的MacOSX10.6机器,下面是我的Ubuntu机器上的当前状态。任何建议将不胜感激!#rubytest.rb:29:in`require':nosuchfiletoload--mongo(LoadError)from:29:in`require'fromtest.rb:1:in`'#cattest.rbrequire'mongo'db=Mongo::Connection.new.db("mydb")#gemwhichmongo/usr/local/rvm/gems/ruby-1.9.2-p0/g