2011-08-21 151 views
26

希望能对你有点帮助这里... 我有一个在外地翻译一个词,与翻译语句填充字段,然后就提交操作都在一个表单提交按钮。页面,而不弹出窗口阻止

提交正在jQuery的制造。 问题的目标页面被阻止,因为所有的3级主要的浏览器把它当作弹出, 你知道如何让它只是作为一个新的选项卡或新窗口中打开? 我不想将目标设置为_self,因为我希望人们也可以打开我的网站。

我相信这个问题是在这个字符串:

document.forms.form1.submit(); 

但我也知道应该有改写它,因此目标将不会作为一个弹出来处理的方式。

这是脚本:

<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> 

,这是形式:

<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> 

编辑

我已经尝试了所有这些字符串的提交:

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

所有结果都是目标弹出被阻止。 请问,有没有其他方式我应该做的代码不让它弹出?

也许应该使用的onsubmit做jQuery的? 有人知道如何?

+0

它是否与弹出式窗口拦截器一起工作。你也可以使用$(“#form1”)。submit();提交表单而不是document.forms.form1.submit(); –

+0

是的,当我批准弹出窗口时没有问题。如果它是由提交按钮submited,而不是jQuery被视为弹出。 –

+0

尝试并调用$(“button”)。点击()提交按钮。 –

回答

-2

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

+0

Hi._new也被阻止...... –

+0

您无法避免浏览器阻止弹出窗口..您可以识别状态并通知用户您的页面需要禁用弹出窗口阻止程序才能正常运行。 这里是一个链接,可以在识别弹出式窗口拦截 http://www.jguru.com/faq/view.jsp?EID=1157429 –

9

一般来说,弹出拦截无需用户交互即可启动的目标窗口。通常点击事件可以打开一个窗口而不被阻塞。 (除非它是一个非常糟糕的弹出窗口拦截器)click事件

5

提交按钮后

尝试启动,添加以下代码,然后设置你的表单目标=“为newwin”

onclick=window.open("about:blank","newwin") 
61

浏览器只有打开选项卡/弹出窗口的命令来自trusted event时,才会打开没有弹出窗口阻止程序警告的选项卡/弹出窗口。这意味着用户必须主动点击某处才能打开弹出窗口。

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

在jQuery中这应该做的伎俩:

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

这里是你的答案:Open new tab without popup blocker after ajax call on user click

+3

该解决方案似乎不工作了帮助。新窗口未打开,Web控制台显示错误消息:“主线程上的同步XMLHttpRequest已弃用,因为它对最终用户的体验有不利影响。有关更多帮助,请访问http://xhr.spec.whatwg.org/ “ –

+0

此解决方案适用于我的浏览器,并将上述内容显示为警告。 –

5

PS>我张贴了这个答案在一个相关的问题。以下是我如何解决异步Ajax请求丢失可信上下文的问题:

我直接在用户单击时打开弹出窗口,将URL指向about:blank,并在该窗口中获得了一个句柄。你也许可以直接在弹出的“装载”的网址,而你的Ajax请求时

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

然后,当我的要求是成功的,我在窗口

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

如果你想要打开一个新窗口,这可以工作。如果开放是有条件的基于回调会怎么样。我们将不得不调用'.close()',它会创建一个打开/关闭闪光....任何想法? –

0
function openLinkNewTab (url){ 
    $('body').append('<a id="openLinkNewTab" href="' + url + '" target="_blank"><span></span></a>').find('#openLinkNewTab span').click().remove(); 
} 
打开我的回调URL
+3

添加一些解释和回答这个答案如何帮助OP在修复当前问题 –

+1

在scratchpad(Firefox)中快速尝试了这一点,并且(如预期的)这触发了我的弹出窗口阻止程序。 'openLinkNewTab('https://ddg.gg');' – retrovertigo

相关问题