在新窗口中打开页面,不会popup窗口阻止

希望你能在这里帮助一下…我有一个表单,在一个字段中翻译一个单词,用翻译后的术语填充这个字段,然后在一个提交button中完成提交操作。

提交正在由jquery进行。 问题是目标页面被阻止,因为所有3个主stream浏览器都将其视为popup窗口,您是否知道如何让它作为新选项卡或新窗口打开? 我不想将目标设置为_self,因为我希望人们也可以打开我的网站。

我相信问题在于这个string:

document.forms.form1.submit(); 

但是我也知道应该有一种方法来重新修改它,所以目标不会被当作是popup窗口。

这是脚本:

 <script type="text/javascript"> $(function transle() { $('#transbox').sundayMorningReset(); $('#transbox input[type=button]').click(function(evt) { $.sundayMorning( $('#transbox input[type=text]').val(), { source: '', destination: 'ZH', menuLeft: evt.pageX, menuTop: evt.pageY }, function(response) { $('#transbox input[type=text]').val(response.translation); //document.getElementById("form1").submit(); document.forms.form1.submit(); } ); }); }); </script> 

这是这样的forms:

 <table id="transbox" name="transbox" width="30px" border="0" cellspacing="0" cellpadding="0"> <form action="custom-page" method="get" name="form1" target="_blank" id="form1"> <tr> <td> <input id="q" name="q" type="text" class="search_input" onFocus="if (this.value == 'Evening dress') {this.value = '';}" onBlur="if (this.value == '') {this.value = 'Evening dress';}" value="Evening dress" /> </td> <td> <input type="button" value="Find" style="color: #333; width: 157px; font-weight:bold"></input> </td> </tr> </form> </table> 

编辑

我已经尝试了所有这些string来提交:

 document.getElementById("form1").submit(); document.forms.form1.submit(); form1.submit(); 

所有的目标都被popup窗口阻止。 请问,有没有其他的方法,我应该做的代码不让它popup?

也许应该使用onsubmit来制作jQuery? 有人知道如何?

如果打开选项卡/popup窗口的命令来自可信任事件,浏览器将只打开一个没有popup窗口阻止程序警告的选项卡/popup窗口。 这意味着用户必须主动点击某处来打开popup窗口。

在你的情况下,用户执行一个点击,所以你有可信的事件。 但是,通过执行Ajax请求,您确实会丢失该可信上下文。 你的成功处理程序不再有这个事件。 解决这个问题的唯一方法是执行一个同步的Ajax请求,它会在运行时阻止浏览器,但会保留事件上下文。

在jQuery中,这应该做的伎俩:

 $.ajax({ url: 'http://yourserver/', data: 'your image', success: function(){window.open(someUrl);}, async: false }); 

这是你的答案: 在用户点击ajax调用后,打开新的选项卡没有popup窗口拦截器

作为一般规则,popup窗口阻止程序会在没有用户交互的情况下启动窗口。 通常点击事件可以打开一个窗口而不被阻塞。 (除非它是一个非常糟糕的popup窗口拦截器)

点击事件后尝试启动

PS>我发布了这个答案的相关问题。 以下是我如何解决我的asynchronousajax请求失去可信上下文的问题:

我直接在用户点击打开popup窗口,将URL指向about:blank并在该窗口中获得句柄。 你可能可以直接popup一个“加载”的url,而你的ajax请求

var myWindow = window.open("about:blank",'name','height=500,width=550');

然后,当我的请求成功时,我打开窗口中的callbackURL

 function showWindow(win, url) { win.open(url,'name','height=500,width=550'); } 

对于提交button,添加这个代码,然后设置你的表单target =“newwin”

 onclick=window.open("about:blank","newwin") 
 function openLinkNewTab (url){ $('body').append('<a id="openLinkNewTab" href="' + url + '" target="_blank"><span></span></a>').find('#openLinkNewTab span').click().remove(); } 

尝试提交表单到一个新的窗口(设置target="new" )这将打开提交的页面在新窗口中,再次无法避免浏览器..