gpt4 book ai didi

xcode - 在 Safari 中获取选定的文本并在操作扩展中使用它

转载 作者:行者123 更新时间:2023-12-04 03:51:18 24 4
gpt4 key购买 nike

我正在为 safari 制作一个 Action 扩展,我需要获取选定的文本以在扩展中使用。

通常在 iOS 中,我使用此代码在 web View 中获取选定的文本

selectedText.text = [WebView stringByEvaluatingJavaScriptFromString: @ "window.getSelection (). toString ()"];

但是在扩展中我不知道我该怎么做!

为了完整起见,它应该是 IU 的扩展,我只需打开 NSExtensionActivationSupportsWebURLWithMaxCount 以使扩展在 Safari 中可用。

提前致谢

最佳答案

正如 Apple 在他们的 App Extension Programming Guide 中解释的那样,您需要在扩展中包含一个 JavaScript 文件来执行任何预处理。该预处理的结果可通过 NSExtensionItem 获得。在扩展中。

我的 iOS Extension Demo 中包含此文件的一个简单示例。 GitHub上的项目,如下所示:

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;

这只是提取有关当前页面的各种详细信息并将它们传递给 completionFunction . ExtensionPreprocessingJS最后的 var 是扩展框架寻找的钩子(Hook)。

在扩展中,您可以通过要求 kUTTypePropertyList 类型的项目在字典中检索这些值。 :
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];
// Continue with data returned from JS...

关于xcode - 在 Safari 中获取选定的文本并在操作扩展中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27348399/

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