2010-07-07 52 views
2

我有一個應用程序,當單擊父窗口中的「說它」按鈕時,將任何選定正文文本傳遞到文本2語音服務器(通過ajax) ;所選文本位於iframe中。防止Safari在按鈕單擊時丟失正文中的選定文本

該選擇適用於Firefox 3.6和IE 8,但不適用於Safari 5(未嘗試任何其他;這是我們支持的瀏覽器列表)。在Safari中,只要單擊執行該功能的按鈕,任何選定的文本都會丟失。

我嘗試添加這鼠標鬆開用於演示的iframe,發現一個解決方案,控制內輸球選定的文本,但它並不適用於選定的文本文檔的身體工作:

$("#the_presentation").mouseup(function(e){ 

    e.preventDefault(); 

}); 

映入所選文本的功能是這樣的:

function getSelectedText(){ 
//Grab selected text 
var _txt = ''; 
var _selection = null; 

if(window.getSelection){ 
    _txt = window.getSelection().toString(); 
} 
else if(document.getSelection){ //deprecated in ff 
    _txt = document.getSelection()+''; 
} 
else if(document.selection){ 
    _selection = document.selection.createRange(); 
    if(_selection != null && _selection.text) 
    { 
    _txt = _selection.text; 
    } 
} 

    return _txt; 
} 

感謝任何見解,您可以提供!

*編輯:我忘了提及只發生在Mac Safari瀏覽器 - Windows Safari沒有問題。

回答

1

爲什麼不在調用getSelectedText()時選擇文本並存儲它,直到點擊按鈕爲止。

在jQuery中,這看起來像以下:

$(function(){ 
    var currentSelectedText = ''; 

    $(document.body).bind('keyup mouseup mousedown', function(){ 
     currentSelectedText = getSelectedText(); //your function from above 
    }); 

    $('#the_form').submit(function(){ 
     makeAjaxCallForSpeech(currentSelectedText); 
    }); 
}); 

(注:從你的問題,我不知道發生了什麼事情與I幀因此該方案不涉及)

+0

好主意!我不喜歡這樣做,感覺有點像黑客,但它的工作,並沒有打破任何其他行爲......謝謝! – 2010-07-07 22:27:05

+0

很高興我能幫到你。 :) – Adam 2010-07-07 22:32:30

+0

它感覺像一個黑客,因爲它*是*黑客:) – 2010-07-07 23:32:08

0

如果您使用<input>類型的元素button,請嘗試使其不可選,以防止單擊時損壞選擇。您可以在大多數瀏覽器中使用CSS並在IE中使用unselectable屬性。我不知道以下內容是否可行,因爲我沒有在Mac上使用Safari。

<style type="text/css"> 
*.unselectable { 
    -moz-user-select: none; 
    -khtml-user-select: none; 
    -webkit-user-select: none; 
    user-select: none; 
} 
</style> 

<input type="button" class="unselectable" unselectable="on" 
    onclick="alert(getSelectedText())"> 
+0

謝謝,這是一個更乾淨的解決方案,但它沒有工作 - 真的希望它會因爲mac safari選擇丟失後點擊按鈕,並給用戶留下的煩惱。 – 2010-07-09 17:33:54

+0

好的。我並不是100%自信。我確信我之前已經掌握了這一點,所以我會有一點戲劇性的。 – 2010-07-09 22:27:49