Javascript 访问共享扩展中的网页属性
当用户使用javascript文件在iOS上打开共享扩展时,我想访问网页属性(标题、元描述、URL、默认图像等)。我正在为javascript()使用以下代码:Javascript 访问共享扩展中的网页属性,javascript,ios,uiviewcontroller,share-extension,Javascript,Ios,Uiviewcontroller,Share Extension,当用户使用javascript文件在iOS上打开共享扩展时,我想访问网页属性(标题、元描述、URL、默认图像等)。我正在为javascript()使用以下代码: var MyExtensionJavaScriptClass=function(){}; MyExtensionJavaScriptClass.prototype={ 运行:函数(参数){ //将网页的baseURI传递给扩展名。 completionFunction({“url”:document.baseURI}); complet
var MyExtensionJavaScriptClass=function(){};
MyExtensionJavaScriptClass.prototype={
运行:函数(参数){
//将网页的baseURI传递给扩展名。
completionFunction({“url”:document.baseURI});
completionFunction({“host”:getHost()});
arguments.completionFunction({“title”:document.title});
completionFunction({“description”:getDescription()});
completionFunction({“image”:getImage()});
},
getHost:function(){
var l=document.createElement(“a”);
l、 href=href;
返回l.hostname;
},
getDescription:function(){
var metas=document.getElementsByTagName('meta');
对于(i=0;i,这里是我如何解决这个问题的
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();
我的意思是metas[I].getAttribute(“name”)=“og:image”没有返回图像。@AsadullahAli条件的目标是检查URL中是否集成了open graph标记或sailthru或twitter卡。如果标记存在,则获取图像。此代码可能需要根据您正在测试的URL进行一些更新。您可以共享您正在测试的URL吗?是的,请检查这是meta图像标记。它有“属性”而不是“名称”。我将metas[I].getAttribute(“名称”)更改为metas[I].getAttribute(“属性”)。最后它给了我一个图像链接。感谢您获得了解决方案。
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();
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
}
})
}
}
}