在FullRequest之后,iOS App Extension javascript参数未定义

时间:2015-09-18 18:11:15

标签: javascript c# ios xamarin xamarin.ios

我正在制作iOS Action App Extension,并且在monotouch中调用finalize()方法后,我无法访问javascript文件中CompleteRequest函数中的数据。我的javascript文件中的run()方法运行正常,因为我能够像apple documentation一样获取页面网址。

这是我的代码:

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}"
    )

1 个答案:

答案 0 :(得分:3)

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

如果您查看Swift中的几个示例,则可以看到他们不使用"kUTTypePropertyList"作为标识符,但使用常量kUTTypePropertyList。通过一些研究,我发现了Xamarin中的等价物:MobileCoreServices.UTType.PropertyList。更换它将解决问题。