2015-02-23 118 views
1

我想弄清楚如何让我的共享扩展访问网页并操纵其内容。我遵循the documentation 但我必须缺少一些东西,因为我没有看到任何符合kUTTypePropertyList的项目,因为我认为我应该这样做。iOS共享扩展,操纵网页

我的plist看起来是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>CFBundleDevelopmentRegion</key> 
    <string>en</string> 
    <key>CFBundleDisplayName</key> 
    <string>WebOutLoudExtension</string> 
    <key>CFBundleExecutable</key> 
    <string>$(EXECUTABLE_NAME)</string> 
    <key>CFBundleIdentifier</key> 
    <string>com.bretlester.WebsiteReader.$(PRODUCT_NAME:rfc1034identifier)</string> 
    <key>CFBundleInfoDictionaryVersion</key> 
    <string>6.0</string> 
    <key>CFBundleName</key> 
    <string>$(PRODUCT_NAME)</string> 
    <key>CFBundlePackageType</key> 
    <string>XPC!</string> 
    <key>CFBundleShortVersionString</key> 
    <string>1.0</string> 
    <key>CFBundleSignature</key> 
    <string>????</string> 
    <key>CFBundleVersion</key> 
    <string>1</string> 
    <key>NSExtension</key> 
    <dict> 
     <key>NSExtensionAttributes</key> 
     <dict> 
      <key>NSExtensionActivationRule</key> 
      <dict> 
       <key>NSExtensionActivationSupportsWebPageWithMaxCount</key> 
       <integer>1</integer> 
       <key>NSExtensionActivationSupportsWebURLWithMaxCount</key> 
       <integer>1</integer> 
       <key>NSExtensionJavaScriptPreprocessingFile</key> 
       <string>ExtensionPreProcessing</string> 
      </dict> 
     </dict> 
     <key>NSExtensionMainStoryboard</key> 
     <string>MainInterface</string> 
     <key>NSExtensionPointIdentifier</key> 
     <string>com.apple.share-services</string> 
    </dict> 
</dict> 
</plist> 

我ExtensionPreProcessing是这样的:

ExtensionPreprocessingJS = { 
run : function(arguments) { 
    arguments.completionFunction({"hello":"world"}); 
}, 
finalize : function(arguments) { 
    document.body.style.backgroundColor = 'red'; 
} 
}; 

最后,我ShareViewController看起来是这样的:

class ShareViewController: UIViewController, NSExtensionRequestHandling { 


override func viewDidLoad() { 

    let identifierType = NSString(format: kUTTypePropertyList, NSUTF8StringEncoding) 

    for (item: NSExtensionItem) in self.extensionContext?.inputItems as [NSExtensionItem] { 
     for (itemProvider: NSItemProvider) in item.attachments as [NSItemProvider] { 
      if itemProvider.hasItemConformingToTypeIdentifier(identifierType) { 
       println("why doesn't this happen?") 
      } 
     } 
    } 

} 

override func viewDidAppear(animated: Bool) { 


} 

override func beginRequestWithExtensionContext(context: NSExtensionContext) { 
    super.beginRequestWithExtensionContext(context) 

    let identifierType = NSString(format: kUTTypePropertyList, NSUTF8StringEncoding) 

    //println(self.extensionContext?.inputItems) 
    for (item: NSExtensionItem) in context.inputItems as [NSExtensionItem] { 
     for (itemProvider: NSItemProvider) in item.attachments as [NSItemProvider] { 
      if itemProvider.hasItemConformingToTypeIdentifier(identifierType) { 
       println("why doesn't this happen?") 
      } 
     } 
    } 

} 

} 

通知我println语句。他们从不执行。我基本上只是寻求某种确认事情正在发挥作用。我的共享扩展名在Safari中显示,但我不认为我的自定义JavaScript正在运行。希望有人能够发现我做错了什么。在此先感谢

回答

2

你是正确的JS没有运行。这是因为你的Info.plist配置。 NSExtensionJavaScriptPreprocessingFile需要是NSExtensionAttributes的子密钥,而不是NSExtensionActivationRule。类似于

<key>NSExtension</key> 
<dict> 
    <key>NSExtensionAttributes</key> 
    <dict> 
     <key>NSExtensionJavaScriptPreprocessingFile</key> 
     <string>ExtensionPreProcessing</string> 
     <key>NSExtensionActivationRule</key> 
     <dict> 
      <key>NSExtensionActivationSupportsWebPageWithMaxCount</key> 
      <integer>1</integer> 
      <key>NSExtensionActivationSupportsWebURLWithMaxCount</key> 
      <integer>1</integer> 
     </dict> 
    </dict> 
    <key>NSExtensionMainStoryboard</key> 
    <string>MainInterface</string> 
    <key>NSExtensionPointIdentifier</key> 
    <string>com.apple.share-services</string> 
</dict> 
+0

宾果。谢谢。 – Bret 2015-02-24 06:39:42

+0

这会使JavaScript在Firefox和Chrome中运行吗? – 2016-11-17 09:43:23

+0

我不知道。如果对你很重要,那么只需要大约5分钟的时间来尝试一下,看看会发生什么。 – 2016-11-17 17:09:58