2014-12-07 11 views
6

Safari için bir işlem uzantısı yapıyorum ve seçili metni uzantının içinde kullanmam gerekiyor.Seçili metni Safari'de alın ve eylem uzantısında kullanın

Genellikle iOS'taki i Yapabileceğim bilmiyorum

selectedText.text = [WebView stringByEvaluatingJavaScriptFromString: @ "window.getSelection(). toString()"]; 

bir WebView'da Ama uzantısı içine seçili metni almak için bu kodu kullanın!

Tamlık için IU ile bir uzantı olmalı ve Safari'de genişletme yapmak için sadece NSExtensionActivationSupportsWebURLWithMaxCount özelliğini açacağım. peşin

Bu işlemi gerçekleştirmek için bir .js dosyasını çalıştırmak gerekebilir

cevap

7

Apple, App Extension Programming Guide numaralı belgede açıkladığı gibi, herhangi bir önişlemeyi gerçekleştirmek için uzantıya bir JavaScript dosyası eklemeniz gerekir. Bu ön işlemin sonuçları, uzatmada NSExtensionItem aracılığıyla kullanılabilir.

bu dosyanın Basit bir örnek GitHub'dan benim iOS Extension Demo projeye dahil edilir ve şöyle görünür: basitçe Mevcut sayfayla ilgili çeşitli ayrıntılar ayıklar ve completionFunction iletir

var MyPreprocessor = function() {}; 

MyPreprocessor.prototype = { 
    run: function(arguments) { 
     arguments.completionFunction({"URL": document.URL, "pageSource": document.documentElement.outerHTML, "title": document.title, "selection": window.getSelection().toString()}); 
    } 
}; 

var ExtensionPreprocessingJS = new MyPreprocessor; 

. Sonunda ExtensionPreprocessingJS var, uzantı çerçevesinin aradığı kancadır. uzantısı olarak

türe kUTTypePropertyList bir öğe için sorarak bir sözlükte bu değerleri alabilir:

for (NSExtensionItem *item in self.extensionContext.inputItems) { 
    for (NSItemProvider *itemProvider in item.attachments) { 
     if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypePropertyList]) { 
      [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypePropertyList options:nil completionHandler:^(NSDictionary *jsDict, NSError *error) { 
       dispatch_async(dispatch_get_main_queue(), ^{ 
        NSDictionary *jsPreprocessingResults = jsDict[NSExtensionJavaScriptPreprocessingResultsKey]; 
        // Continue with data returned from JS... 
+0

Mükemmel atamak için bu değişken kullanabilirsiniz! Projeniz inanılmaz derecede kapsamlı ve sorunumu çözmemi sağladı! Çok teşekkür ederim! – Ragazzetto

+0

@ Tom Merhaba, ben document.body ayıklamak çalıştım ama işe yaramıyor. Bir ekran görüntüsü görüntüsü almaya çalışıyorum. Lütfen öneriniz için teşekkürler. –

+1

@WilliamKu "çalışmıyor", yaşadığınız sorunla ilgili herhangi bir bilginiz yok. Sorun yaşıyorsanız, bazı detaylarla yeni bir soru gönderin. –

0

yılında

teşekkürler.

Bu Extension's Tutorial referansını tavsiye ederim, İhtiyacınıza neredeyse benzer.

+0

Teşekkür Harshit bağlantıdan! Öğretici de UI olmadan bir uzantı olarak çok iyi çalışır, ancak UI ile js dosya uzantıları çalıştıran sorun yaşıyorum, nihayetinde bir UITextView metni uzatma arabiriminde ayarlayamıyorum! Herhangi bir öneriniz var mı? – Ragazzetto

+0

Aynı öğreticide, bu işlevde "itemLoadCompletedWithPreprocessingResults" işlevi var; satır no. 25 -> "metin" değişkeni, java komut dosyasından seçilen metnin değerini alıyor. Bu nedenle, TextView ... – HarshIT

İlgili konular