OGeek|极客世界-中国程序员成长平台

标题: javascript - iOS App Extension javascript 参数在 CompleteRequest 之后未定义 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 08:54
标题: javascript - iOS App Extension javascript 参数在 CompleteRequest 之后未定义

我正在制作 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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4