我正在开发一个电子商务 (PHP) 网站,这是我的要求。
一旦客户离开订单页面或关闭浏览器, 我想提供另一种带有弹出窗口或警告框的产品。 如果他们选择"is",它将重定向到另一个产品页面 而不是关闭窗口。
我尝试在正文“onunload”事件上使用 javascript window.open()。 但是浏览器一直阻止它。
有没有办法做到这一点?
谢谢, 登
最佳答案
首先:这根本不是用户友好的。就像@Dagon 所说的那样,没有人希望被限制离开页面,然后显示正在出售的不同商品的垃圾邮件。话虽这么说,我确定您有正当理由,或者更确切地说是被告知要这样做。所以这是我的答案---
onunload 事件无法做到这一点。一旦该事件被触发,就没有机会重定向或取消卸载,因为它实际上是 on unload 事件。
执行此操作的最佳机会是在 onbeforeunload 事件中。这是唯一实际暂停 onunload 事件并且也可以取消 onunload 执行的事件。 onbeforeunload 事件有两种不同的结果
您可能想尝试的一个想法(我从未尝试过)是尝试将超链接添加到 onbeforeunload 事件的返回语句中。同样,不知道这是否可行。
下面是 onbeforeunload 和 onunload 事件的一个非常简单的示例:
<script type="text/javascript"> //may not be neccesary for your code
window.onbeforeunload=before;
window.onunload=after;
function before(evt)
{
return "This will appear in the dialog box allong with some other default text";
//If the return statement was not here, other code could be executed silently (with no pop-up)
}
function after(evt)
{
//This event fires too fast for the application to execute before the browser unloads
}
</script>
我知道您想创建警报或确认弹出窗口,但这也有一些问题。典型的程序员无法访问 onbeforeunload 和 onunload 事件的源代码,因此没有人 100% 确定他们所做的一切。据我所知,根据我的测试,似乎不可能让自定义弹出窗口仅出现一次并同时执行其他代码。
如果用户正在关闭网页,唯一的捕获方法是在 onbeforeunload 事件中。没有办法摆脱那个。如果用户使用后退按钮,也会触发 onbeforeunload 事件。我知道你的最终目标是什么,但我有一个建议,当然如果允许的话。尝试在您的页面上锚定链接或按钮。如果绝对需要这个弹出窗口,唯一可靠的方法是将弹出窗口锚定到您网页上的链接/按钮。但是当然,这只有在他们试图使用您的链接离开时才有效(这会更加用户友好),但是如果他们试图使用外部链接(例如收藏链接或关闭浏览器)离开,那么它会不被执行。
祝您工作顺利。 Onbeforeunload 和 onunload 很棘手。
关于php - 浏览器关闭时显示弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16783063/
我的代码目前看起来像这样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上找到一
我正在尝试在Ruby中制作一个cli应用程序,它接受一个给定的数组,然后将其显示为一个列表,我可以使用箭头键浏览它。我觉得我已经在Ruby中看到一个库已经这样做了,但我记不起它的名字了。我正在尝试对soundcloud2000中的代码进行逆向工程做类似的事情,但他的代码与SoundcloudAPI的使用紧密耦合。我知道cursesgem,我正在考虑更抽象的东西。广告有没有人见过可以做到这一点的库或一些概念证明的Ruby代码可以做到这一点? 最佳答案 我不知道这是否是您正在寻找的,但也许您可以使用我的想法。由于我没有关于您要完成的工作
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
下面的代码在我第一次运行它时就可以正常工作:require'rubygems'require'spreadsheet'book=Spreadsheet.open'/Users/me/myruby/Mywks.xls'sheet=book.worksheet0row=sheet.row(1)putsrow[1]book.write'/Users/me/myruby/Mywks.xls'当我再次运行它时,我会收到更多消息,例如:/Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:11
我想用这两种语言中的任何一种(最好是ruby)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生
一段时间以来,我一直在使用open_uri下拉ftp路径作为数据源,但突然发现我几乎连续不断地收到“530抱歉,允许的最大客户端数(95)已经连接。”我不确定我的代码是否有问题,或者是否是其他人在访问服务器,不幸的是,我无法真正确定谁有问题。本质上,我正在读取FTPURI:defself.read_uri(uri)beginuri=open(uri).readuri=="Error"?nil:urirescueOpenURI::HTTPErrornilendend我猜我需要在这里添加一些额外的错误处理代码...我想确保我采取一切预防措施来关闭所有连接,这样我的连接就不是问题所在,但是我
我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d
我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.
我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT
使用ruby的watir测试网络应用程序时,浏览器最后会保持打开状态。网上的一些建议是,要进行真正的单元测试,您应该在每次测试时(在拆卸调用中)打开和关闭浏览器,但这很慢而且毫无意义。或者他们做这样的事情:defself.suites=superdefs.afterClass#Closebrowserenddefs.run(*args)superafterClassendsend但这会导致摘要输出不再显示(诸如“100次测试、100次断言、0次失败、0次错误”之类的内容仍应显示)。我怎样才能让ruby或watir在我的测试结束时关闭浏览器? 最佳答案