2011-08-21 125 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

相關問題