• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

javascript - iOS App Extension javascript 参数在 CompleteRequest 之后未定义

[复制链接]
菜鸟教程小白 发表于 2022-12-12 08:54:49 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在制作 iOS Action App Extension,但在调用 CompleteRequest 后,我无法访问 javascript 文件中 finalize() 函数中的数据> 单点触控方法。我的 javascript 文件中的 run() 方法工作正常,因为我能够像在 apple documentation 中一样获取页面 url .

这是我的代码:

NSDictionary itemData = new NSDictionary(new NSString("bgColor"),new NSString("red"));

var resultsDictionary = new NSDictionary(NSJavaScriptExtension.FinalizeArgumentKey, itemData);

var resultsProvider = new NSItemProvider(resultsDictionary, "kUTTypePropertyList");

var resultsItem = new NSExtensionItem();
resultsItem.Attachments = new NSItemProvider[] { resultsProvider };

ExtensionHelper.ExtensionContext.CompleteRequest(new NSExtensionItem[] { resultsItem }, null);

在我的 javascript 文件中:

var MyExtensionJavaScriptClass = function() {};

MyExtensionJavaScriptClass.prototype = {
     run: function(arguments) {
         // This works completely fine
         arguments.completionFunction({"baseURI": document.baseURI});
     },
     finalize: function(arguments) {
         console.log(arguments["bgColor"]); // Undefined
         document.body.style.backgroundColor = arguments["bgColor"];
     }
};

var ExtensionPreprocessingJS = new MyExtensionJavaScriptClass; 

当我将 finalize 函数的 arguments 变量转储到控制台时,它看起来像一个空对象:

Object

    __defineGetter__: function __defineGetter__() {
    __defineSetter__: function __defineSetter__() {
    __lookupGetter__: function __lookupGetter__() {
    __lookupSetter__: function __lookupSetter__() {
    constructor: function Object() {
    hasOwnProperty: function hasOwnProperty() {
    isPrototypeOf: function isPrototypeOf() {
    propertyIsEnumerable: function propertyIsEnumerable() {
    toLocaleString: function toLocaleString() {
    toString: function toString() {
    valueOf: function valueOf() {
    __proto__: Object

这是模拟器 system.log 包含的内容:

MobileSafari[64987]: completed request - items: (
        "<NSExtensionItem: 0x7d798940> - userInfo: {\n    NSExtensionItemAttachmentsKey =     (\n        \"<NSItemProvider: 0x7d78f910> {types = (\\n    kUTTypePropertyList\\n)}\"\n    );\n}"
    )



Best Answer-推荐答案


显然,Xamarin.iOS documentation on app extensions有一些无效的代码。

如果您查看 Swift 中的几个示例,您可以看到他们没有使用 "kUTTypePropertyList" 作为标识符,而是使用常量 kUTTypePropertyList。通过一些研究,我在 Xamarin 中找到了等效项:MobileCoreServices.UTType.PropertyList。更换它会解决问题。

关于javascript - iOS App Extension javascript 参数在 CompleteRequest 之后未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32658492/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap