2015-10-19 74 views
1

當用戶使用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; 

這是訪問的網頁特性也什麼是在內容獲取第一圖像的最佳方法的正確途徑。

任何幫助將不勝感激。

回答

7

這是我如何解決這個問題。

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 
       } 
      }) 
     } 
    } 
} 
+0

你的JS是不是對圖像加工.. –

+0

我的意思是METAS [I] .getAttribute( 「名」)==「OG :圖像「不是返回圖像。 –

+0

@AsadullahAli該條件的目的是檢查URL中是否包含開放圖形標籤或sailthru或twitter卡。如果標籤存在,則獲取圖像。此代碼可能需要根據您正在測試的URL進行一些更新。你能分享你正在測試的網址嗎? – Puru