2014-12-07 56 views
6

我正在爲safari做一個動作擴展,我需要獲取選定的文本以便在擴展中使用。在Safari中獲取選定的文本並在行動擴展中使用它

通常在iOS中我使用此代碼來獲得在網頁視圖

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

但延長的內選定的文本,我不知道我該怎麼辦!

爲了完整起見,它應該是IU的擴展,我只是打開NSExtensionActivationSupportsWebURLWithMaxCount來在Safari中提供擴展。

在此先感謝

回答

7

正如Apple在其App Extension Programming Guide中所解釋的那樣,您需要在擴展中包含JavaScript文件以執行任何預處理。預處理的結果可通過NSExtensionItem在擴展中找到。

這個文件的一個簡單的例子包括在GitHub上我iOS Extension Demo項目,看起來像這樣:

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; 

,簡單地提取有關當前頁面的各種細節,並把它們傳遞給completionFunction。最後的var是最後一個變量,它是擴展框架尋找的鉤子。該鏈接

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

太棒了! 您的項目令人難以置信的全面,讓我解決了我的問題! 非常感謝你! – Ragazzetto 2014-12-11 22:14:22

+0

@Tom嗨,我試圖提取document.body,但它不起作用。我正在嘗試獲取屏幕截圖。請提前告知,謝謝。 – 2015-10-15 02:19:54

+1

@WilliamKu「不起作用」並沒有任何關於您遇到的問題的信息。如果遇到問題,請提供一些新的問題,並提供一些細節。 – 2015-10-15 03:23:22

0

您可能需要執行.js文件用於執行該操作。

我建議你參考這個Extension's Tutorial,它幾乎和你的要求相似。

+0

感謝HarshIT:

在擴展,你可以通過詢問kUTTypePropertyList類型的一個項目檢索字典中的這些值! 該教程也可以很好地作爲沒有UI的擴展,但是我在使用UI運行js文件擴展時遇到了問題,最終我無法在擴展接口中設置UITextView的文本! 你有什麼建議嗎? – Ragazzetto 2014-12-11 21:15:11

+0

在同一個教程中,該函數中有一個函數「itemLoadCompletedWithPreprocessingResults」;見行號。 25 - >變量「text」具有java腳本中選定文本的值。所以你可以使用該變量在TextView中分配... – HarshIT 2014-12-12 08:36:39

相關問題