Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
操纵网页的iOS共享扩展_Ios_Swift_Ios8 Share Extension - Fatal编程技术网

操纵网页的iOS共享扩展

操纵网页的iOS共享扩展,ios,swift,ios8-share-extension,Ios,Swift,Ios8 Share Extension,我正试图弄清楚如何让我的共享扩展访问网页并操纵其内容。我跟着 但我肯定遗漏了什么,因为我没有看到任何符合kuttypropertylist的项目 我的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

我正试图弄清楚如何让我的共享扩展访问网页并操纵其内容。我跟着 但我肯定遗漏了什么,因为我没有看到任何符合
kuttypropertylist
的项目

我的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>
ExtensionPreprocessingJS = {
run : function(arguments) {
    arguments.completionFunction({"hello":"world"});
},
finalize : function(arguments) {
    document.body.style.backgroundColor = 'red';
}
};
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?")
            }
        }
    }

}

}
最后,我的ShareViewController如下所示:

<?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>
ExtensionPreprocessingJS = {
run : function(arguments) {
    arguments.completionFunction({"hello":"world"});
},
finalize : function(arguments) {
    document.body.style.backgroundColor = 'red';
}
};
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没有运行。希望有人能发现我做错了什么。提前感谢

您认为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>
NSExtension
N扩展属性
NSExtensionJavaScriptPreprocessingFile
扩展预处理
NSExtensionActivationRule
NSExtensionActivationSupportsWebPageWithMaxCount
1.
NSExtensionActivationSupportsWebUrWithMaxCount
1.
NSextensionMainstryBoard
主界面
NSExtensionPointIdentifier
com.apple.share-services

这会让javascript也在Firefox和Chrome中运行吗?我不知道。如果它对你很重要,那么只需要5分钟就可以尝试一下,看看会发生什么。