4

当用户使用 javascript 文件在 iOS 上打开共享扩展时,我想访问网页属性(标题、元描述、URL、默认图像等)。我正在为 javascript 使用以下代码(https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW12 ):

    var MyExtensionJavaScriptClass = function() {};

MyExtensionJavaScriptClass.prototype = {
    run: function(arguments) {
    // Pass the baseURI of the webpage to the extension.
        arguments.completionFunction({"url": document.baseURI});
        arguments.completionFunction({"host": getHost()});
        arguments.completionFunction({"title": document.title});
        arguments.completionFunction({"description": getDescription()});
        arguments.completionFunction({"image": getImage()});
    },
    getHost: function() {
        var l = document.createElement("a");
        l.href = href;
        return l.hostname;
    },
    getDescription: function() {
        var metas = document.getElementsByTagName('meta'); 

       for (i=0; i<metas.length; i++) { 
          if (metas[i].getAttribute("property") == "description") { 
             return metas[i].getAttribute("content"); 
          } 
       } 
        return "";
    },
    getImage: function() {
        // Need to find this out
        return "";
    },
// Note that the finalize function is only available in iOS.
    finalize: function(arguments) {
        // arguments contains the value the extension provides in [NSExtensionContext completeRequestReturningItems:completion:].
    // In this example, the extension provides a color as a returning item.
    document.body.style.backgroundColor = arguments["bgColor"];
    }
};

// The JavaScript file must contain a global object named "ExtensionPreprocessingJS".
var ExtensionPreprocessingJS = new MyExtensionJavaScriptClass;

这是访问网页属性的正确方法,也是获取内容中第一个图像的最佳方法。

任何帮助将非常感激。

4

1 回答 1

11

这是我解决这个问题的方法。

JS代码:

var MyExtensionJavaScriptClass = function() {};

MyExtensionJavaScriptClass.prototype = {
    getDescription: function() {
        var metas = document.getElementsByTagName('meta'); 
        for (i=0; i<metas.length; i++) { 
            if (metas[i].getAttribute("name") == "description") { 
                return metas[i].getAttribute("content"); 
            }
        }
        return "";
    },
    getImage: function() {
        var metas = document.getElementsByTagName('meta'); 
        for (i=0; i<metas.length; i++) { 
            if (metas[i].getAttribute("name") == "og:image" || metas[i].getAttribute("name") == "sailthru.image.full" || metas[i].getAttribute("name") == "twitter:image:src") { 
                return metas[i].getAttribute("content"); 
            }
        }
        return "";
    },
    run: function(arguments) {
    // Pass the baseURI of the webpage to the extension.
        arguments.completionFunction({"url": document.baseURI, "host": document.location.hostname, "title": document.title, "description": this.getDescription(), "image": this.getImage()});
    },
// Note that the finalize function is only available in iOS.
    finalize: function(arguments) {
        // arguments contains the value the extension provides in [NSExtensionContext completeRequestReturningItems:completion:].
    // In this example, the extension provides a color as a returning item.
    // document.body.style.backgroundColor = arguments["bgColor"];
    }
};

// The JavaScript file must contain a global object named "ExtensionPreprocessingJS".
var ExtensionPreprocessingJS = new MyExtensionJavaScriptClass;

// ExtensionPreprocessingJS.test();

SWIFT代码:

for item: AnyObject in (self.extensionContext?.inputItems)! {
    let inputItem = item as! NSExtensionItem

    for provider: AnyObject in inputItem.attachments! {
        let itemProvider = provider as! NSItemProvider

        if itemProvider.hasItemConformingToTypeIdentifier(kUTTypePropertyList as String) {
            itemProvider.loadItemForTypeIdentifier(kUTTypePropertyList as String, options: nil, completionHandler: { (result: NSSecureCoding?, error: NSError!) -> Void in
                if let resultDict = result as? NSDictionary {
                    self.articleTitle = resultDict[NSExtensionJavaScriptPreprocessingResultsKey]!["title"] as! String
                    self.articleHost = resultDict[NSExtensionJavaScriptPreprocessingResultsKey]!["host"] as! String
                    self.articleDesc = resultDict[NSExtensionJavaScriptPreprocessingResultsKey]!["description"] as! String
                    self.articleImage = resultDict[NSExtensionJavaScriptPreprocessingResultsKey]!["image"] as! String
                    self.articleUrl = resultDict[NSExtensionJavaScriptPreprocessingResultsKey]!["url"] as! String
                }
            })
        }
    }
}
于 2015-10-19T03:35:24.377 回答