点击几秒后打开一个新选项卡,避免弹出窗口阻止程序不使用Ajax

时间:2017-06-10 16:49:05

标签: javascript jquery

请在贬低之前阅读我的理性。

我正在建立一个小型网络教育项目,其中有一个艺术部分。单击按钮后,将显示包含带有艺术作品的图片的元素。之后,我想要另一个窗口打开另一个网站,其中包含有关特定艺术作品(维基百科,博物馆网站,虚拟画廊等)的更多或相关信息。 我知道我可以在另一个网站的链接上添加另一个按钮,以便用户在查看艺术作品后可以自己点击,但我真的希望实现这种动态感,同时也让用户关注相关内容。他们看过艺术品之后的网站。 这是我的代码:

jQuery('a.artpiece').click(function(){
        $(".photoContainer").show();

  setTimeout(function() {
    window.open("http://www.anotherartwebsite.com");
  }, 6000);

});

不幸的是弹出窗口阻止程序被触发,因为你知道浏览器不会将window.open函数作为用户操作的直接结果,因为它会延迟几秒钟。 我在这里经历了一些帖子,其中使用Ajax来避免弹出窗口阻止程序,但是因为在这种情况下我不使用Ajax,所以我不确定它们是否能满足我的目的。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

不要打开新的window,而是打开modal。在modal中,添加指向维基百科网址的iframe。因此,您的模态将显示文章的内容。

当你已经使用jQuery时,你会发现很多模态小部件。以下一个似乎很合适:http://www.nfl.com/liveupdate/gamecenter/57167/ATL_Gamebook.pdf

答案 1 :(得分:1)

我明白你的意图不是使用弹出窗口来表示邪恶,但是有足够多的人使用它是邪恶的,甚至好人也会受到弹出窗口拦截器的影响。这就是为什么我们不能拥有美好的东西。

  

我在这里经历了一系列帖子,其中使用Ajax进行解决方法以避免弹出窗口阻止程序

我相信你指的是this answer?如果是这样,那对你的目的不起作用 - 在打开弹出窗口之前,提问者想要等待JSON调用的结果,因此解决方案是使该调用同步,以便它的返回结束被视为同一点击事件的一部分。

这并不适合你的情况,因为你想要的是一个相对较长的延迟 - 理论上你可以做一个无操作的同步ajax调用并让服务器故意延迟响应一段时间(并希望浏览器在此期间不会超时)...但同时用户的浏览器UI在等待该响应时将被完全锁定。这不好(并且是同步ajax被弃用的原因;我相信一些浏览器如果你尝试它就会抛出错误,而且它们迟早都会出错。)

这样就出来了。

因此,您的选择是

  1. 延迟,然后自动将维基百科文章拉入内联iframe而不是辅助窗口
  2. 让用户主动点击按钮弹出维基百科文章,而不是自动加载。
  3. 在这里,我将失去对待这个问题,好像它是一个ux.stackexchange问​​题,提前道歉:我会强烈敦促你考虑选项2而不是1。当网站因为没有明显原因而在我脸上抛出意想不到的内容时,我讨厌它,这正是用户体验的结果。 ("我正在看艺术!现在我的脸上有一篇维基百科文章!谁问过这个?")

    您可以推迟显示该"点击此处获取更多信息"按钮几秒钟,让用户有机会首先欣赏艺术。但只是将这些信息放在他们身上,无论他们是否愿意,我都会考虑用户敌对行为(无论是在弹出窗口还是在主窗口内部。)