gpt4 book ai didi

iOS 共享扩展无法从 Chrome 获取共享 URL

转载 作者:行者123 更新时间:2023-12-01 20:12:43 25 4
gpt4 key购买 nike

我正在尝试为我的应用程序实现共享扩展。它在 safari 浏览器和 youtube 应用程序中运行良好(即,当我从这些应用程序共享时,我得到 public.url,它是要共享的 url。

当我在 chrome 中尝试相同时,它没有显示扩展名。当我在 NSExtensionActivationRule 下添加 NSExtensionActivationSupportsText 为 true 时,它​​开始显示。但是当我尝试共享内容时,我无法获取要共享的 URL 字符串。我只得到内容文本。

我已遵循此链接中显示的方法 https://stackoverflow.com/a/31942744/6199038 .

我还添加了 demoProcessor.js

var MyPreprocessor = function() {};
MyPreprocessor.prototype = {
run: function(arguments) {
arguments.completionFunction({"URL": document.URL, "pageSource": document.documentElement.outerHTML, "title": document.title, "selection": window.getSelection().toString()});
}
};
var ExtensionPreprocessingJS = new MyPreprocessor;

我正在使用 SLComposeServiceViewController

在我的 ShareViewController.m 中,我试图获取如下所示的数据,

对于 Safari ,我使用了这个,它工作正常
NSExtensionItem *item = self.extensionContext.inputItems.firstObject;
NSItemProvider *itemProvider = [[item.userInfo valueForKey:NSExtensionItemAttachmentsKey] objectAtIndex:0];
if ([itemProvider hasItemConformingToTypeIdentifier:@"public.url"]) {
[itemProvider loadItemForTypeIdentifier:@"public.url" options:nil completionHandler:^(NSURL *url, NSError *error) {
urlString = url.absoluteString;
NSLog(@"urlString %@",urlString);
}];
}

然后我修改了我的代码以从 chrome 获取 URL,这不起作用。
 for (NSExtensionItem *item in self.extensionContext.inputItems) {
for (NSItemProvider *itemProvider in item.attachments) {
if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypePropertyList]) {
[itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypePropertyList options:nil completionHandler:^(NSDictionary *jsDict, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *jsPreprocessingResults = jsDict[NSExtensionJavaScriptPreprocessingResultsKey];

NSString *selectedText = jsPreprocessingResults[@"selection"];
NSString *pageTitle = jsPreprocessingResults[@"title"];
NSString *URL = jsPreprocessingResults[@"URL"];

NSLog(@"selectedText %@",selectedText);
NSLog(@"pageTitle %@",pageTitle);
NSLog(@"URL %@",URL);
});
}];

break;
}
}

}

请咨询

最佳答案

我自己解决了。因为它没有进入“loadItemForTypeIdentifier”方法。所以我将我的方法修改为以下代码

for (NSExtensionItem *item in self.extensionContext.inputItems) {
for (NSItemProvider *itemProvider in item.attachments) {

NSString *URLinPlainText = [item.attributedContentText string];
if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]) {
[itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(NSURL *url, NSError *error) {

urlString = url.absoluteString;
NSLog(@"<< URL >> %@",urlString);
return;
}];
}
else if (URLinPlainText) {
// In Some app i got the URL in a Plain text mode
if([URLinPlainText containsString:@"http"]){
urlString = [sharedPlainText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"<< URL >> %@",urlString);
return;
}
}
}
}

而且我还删除了 demoProcessor.js。
现在我能够从几乎所有新闻应用程序、浏览器(如 Chrome、firefox、safari)中获取 URL,并且在某些应用程序中,我以纯文本形式获取共享 url,然后我必须删除空格并将其转换为 NSString。

据我了解,如果用户想要访问仅适用于 safari 浏览器的 ex(title, baseURL, og:image, og:description 等) 的 url 页面属性,则使用 demoprocessor.js。

关于iOS 共享扩展无法从 Chrome 获取共享 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37454200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com