2010-06-29 26 views
13

में चयनित टेक्स्ट प्राप्त करने के लिए जावास्क्रिप्ट का उपयोग करें, इसलिए मैं एक बुकमार्कलेट पर काम कर रहा हूं जहां "लूप" का उपयोग करके उपयोगकर्ता द्वारा चुने गए सामग्री को पकड़ना मेरे लिए आदर्श होगा। दोनों window.getSelection और document.getSelection वे फ़ंक्शंस हैं जिन्हें मैं कॉल कर सकता हूं, हालांकि, वे हमेशा खाली स्ट्रिंग लौटते हैं।मोबाइल सफारी

मुझे विश्वास है कि समस्या यह है कि जब आप मोबाइल सफारी में बुकमार्क आइकन पर टैप करते हैं, तो चयन जारी किया जाता है। उदाहरण के लिए, यदि आप कुछ टेक्स्ट चुनते हैं, तो "+", बुकमार्क या अन्य टैब टैप करें, चयन रद्द होने पर भी चयन रद्द नहीं किया जाता है।

इस डेटा पर किसी भी विचार को प्राप्त करना संभव है? या यह बहुत असंभव है?

+0

क्या आप सुनिश्चित हैं कि window.getSelection() खाली स्ट्रिंग देता है, और DOMSelection नहीं? मेरे पास मोबाइल सफारी तक पहुंच नहीं है, लेकिन वेबकिट में यह फ़ंक्शन DOMSelection देता है भले ही पृष्ठ पर कुछ भी नहीं चुना गया हो। – SWilk

+0

यह भी देखें http://stackoverflow.com/questions/1936132/getselection-for-iphone-bookmarklet – cofiem

उत्तर

1

मुझे लगता है कि आपको बुकमार्क में कुछ सामग्री डालने की आवश्यकता होगी जो चयन पर काम करेगा। आप पृष्ठ के ऊपर या नीचे एक बटन जोड़ सकते हैं, और जब क्लिक किया जाता है तो यह वर्तमान चयन पर कार्य करेगा। इसके बाद यह अतिरिक्त सामग्री को साफ कर सकता है या वहां छोड़ सकता है।

+0

यह प्रश्नों में से एक है जिसे मैंने इस प्रश्न को पोस्ट करने के बाद सोचा था। इस समाधान के साथ मेरी चिंता यह है कि मैं जोड़ा गया "बटन" रखने का एक अच्छा तरीका नहीं सोच सकता ताकि यह आसानी से चयन योग्य हो सके। मोबाइल सफारी "स्थिति: निश्चित" सीएसएस संपत्ति का समर्थन नहीं करता है। इसके अलावा यह अधिक कदम जोड़ता है: 1) सक्रिय करें बुकमार्क 2) पाठ का चयन करें 3) बुकमार्क बनाम 1) पाठ का चयन करें 2) को सक्रिय करें बुकमार्क आप अपने सुझाव के लिए धन्यवाद का पता लगाएं और सक्रिय करने के लिए जोड़ा सामग्री। – Nirmal

+0

आप http://amplify.com/ से बुकमार्कलेट पर एक लूम लेना चाहते हैं - वे वही करते हैं जो यहां प्रस्तावित किया गया है और बटन स्क्रॉल क्रियाओं का पालन करता है। – FRotthowe

1

"लूप" की सामग्री मोबाइल ब्राउज़र, अवधि में जावास्क्रिप्ट के संपर्क में नहीं आती है। तो यह असंभव है (मुझे लगता है कि आप पूर्ण ब्राउज़र में काम कर रहे हैं, जब आप "होम पेज पर सहेजा गया" आइकन लॉन्च करते हैं तो ब्राउज़र विंडो में नहीं)

+0

आपकी पोस्ट एक टिप्पणी है और उत्तर नहीं। जब आप कोई प्रश्न पूछ रहे हों और समाधान पोस्ट न करें तो टिप्पणियों का उपयोग करें। अन्यथा यह सहायक नहीं है। – UpHelix

+0

यह एक उत्तर है यदि वह मूल ब्राउज़र में काम कर रहा है। –

-1

मेरे पास एक काफी सरल विचार है।

var latestSelection = ""; 
while (true) 
{ 
    var tmp; 
    if ((tmp = document.getSelection()) != "") 
     latestSelection = tmp; 
} 

इस तरह से आप हमेशा नवीनतम चयन चर में नवीनतम चयन करेंगे। बेशक यह एक लूप चलाने के लिए हर समय महंगा होगा महंगा होगा। तो आप शायद श्रोताओं या कम से कम टाइमर के साथ खेलना चाहते हैं।

उम्मीद है कि इससे मदद मिलती है।

अद्यतन: उपरोक्त कोड का उपयोग न करें।

- (void) updateSelection 
{ 
    NSString * tmp = [webView stringByEvaluatingJavaScriptFromString:@"document.getSelection()"]; 
    if (![tmp isEqualToString:@""]) 
     latestSelection = tmp; 
} 

आपके पास टाइमर पर अमल updateSelection हर एक्स समय इकाइयों हो सकता है:

का तरीका यहां बताया उद्देश्य-सी में एक ही बात लिखने होता है। अगर आपको कुछ अच्छी अधिसूचना मिलती है जो आपको पता है कि उपयोगकर्ता ने वेबव्यू के साथ बातचीत की है, तो आप इसका उपयोग नवीनतम चयन को अपडेट करने के लिए कर सकते हैं।

+0

मुझे लगता है कि यह UI थ्रेड को लॉक करेगा, हालांकि setInterval() या setTimeout() का उपयोग करने के लिए बदलना नहीं होगा;) –

+0

क्या कोई यह समझा सकता है कि यह उत्तर क्यों दिया गया था? मैं समझाता हूं कि आपको टाइमर या श्रोताओं का उपयोग करना चाहिए, ताकि आप यूआई-थ्रेड को लॉक न करें। अगर आप जावास्क्रिप्ट में इसे लिखना नहीं चाहते हैं, तो आप ऑब्जेक्टिव-सी में आसानी से एक ही चीज़ लिख सकते हैं। कोड सिर्फ एक विचार समझा रहा था। मैं यह सुझाव नहीं दे रहा था कि आप वास्तव में उस कोड का उपयोग करेंगे। –

+0

मुझे नहीं पता कि यह क्यों मतदान किया गया था। मेरे लिए उपयोगी लग रहा है। मैंने बस इसे वोट दिया। कोई विचार किस प्रकार श्रोताओं का उपयोग करना है? टाइमर अंतिम टाइमर टिक के बीच होने वाले चयन में अनुपलब्ध परिवर्तनों का जोखिम चलाएंगे और जब आप बुकमार्कलेट निष्पादित करेंगे। – LarsH

संबंधित मुद्दे