在javascript中绕过window.open()的弹出窗口阻止程序

时间:2017-06-09 07:04:42

标签: javascript html

我有一个文本文件,其中一些行包含一些关键字。我的练习是从该文件中提取信息并创建一个html文档,在文本文件中插入带有适当标签的留置权。 例如: 这是文本文件:

This should be in a html tag with START as class name
THIS SHOULD BE IN A HTML TAG WITH CAPITALS AS CLASS NAME
This should be in a HTML tag with CODE as class name

现在编写一个javascript程序将这些行插入HTML非常容易。我刚刚使用了一些字符串处理:

if(contents[i].indexOf(" CODE")!=-1){
                            w.document.write("<p class='code'>"+lines+"</p>");

                        }

我正在将所有这些写入一个新的window.open对象。主要问题是弹出窗口阻止程序不允许此功能。那么,还有其他方法可以做到这一点吗?我无法在物理上生成html文件,我需要动态生成它,所以window.open是我能想到的唯一方法。还有其他方法可以帮助我吗? (我可以通过使用

绕过弹出窗口阻止程序
w=window.open("somefile.html")
w.document.opne("somefile.html")

其中somefile.html是任何文件。但我不想这样做,这似乎不太干净。)

更多,为了我访问该文件,我必须在服务器上托管它(我目前正在使用节点为此提供的http服务器)还有其他替代方法吗?

我不想使用Jquery,我希望用vanilla javascript完成所有这些。但如果有可能与Jquery这样做,请告诉我。

非常感谢:)

1 个答案:

答案 0 :(得分:1)

原则上,所有现代浏览器都会阻止弹出窗口。他们会问你是否要允许他们,否则他们不会允许他们。

如果 是另一个文档,那么iframe可能会有用吗?

这是一堆额外的解决方案:

  • 有一个假的弹出窗口。只是一个div,其中所有数据都浮动在您的常规内容之上。您可以为其添加“x”按钮以关闭它并实现一些拖放功能。视觉效果大致相同,但用户不能将其视为操作系统级窗口。
  • 尝试以某种方式将内容集成到常规页面中。 iframe或者只是常规内容。现代设计已经过了在单个平面之外需要弹出窗口和其他内容的阶段。此外,在移动设备上还不清楚弹出窗口的工作方式。
  • 在新标签中打开内容。这基本上只是使用<a>标记。您可以将您希望拥有的内容放入链接的片段中,您打开的页面可以解码片段并显示您想要的信息。可能无法使用巨大的内容。
  • 有更好的流量允许弹出窗口。告知用户您的网站需要弹出窗口并让他们禁用它。一个好方法是提供一个触发弹出窗口的按钮,该按钮将被阻止。然后通知他们告诉浏览器允许弹出窗口,因为大多数人都会显示弹出窗口是如何被阻止的。然后,您可以显示常规弹出窗口,而不会有用户错过数据的风险。