菜鸟教程小白 发表于 2022-12-12 08:54:49

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


                                            <p><p>我正在制作 <code>iOS Action App Extension</code>,但在调用 <code>CompleteRequest</code> 后,我无法访问 javascript 文件中 <code>finalize()</code> 函数中的数据> 单点触控方法。我的 javascript 文件中的 run() 方法工作正常,因为我能够像在 <a href="https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1" rel="noreferrer noopener nofollow">apple documentation</a> 中一样获取页面 url .</p>

<p>这是我的代码:</p>

<pre><code>NSDictionary itemData = new NSDictionary(new NSString(&#34;bgColor&#34;),new NSString(&#34;red&#34;));

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

var resultsProvider = new NSItemProvider(resultsDictionary, &#34;kUTTypePropertyList&#34;);

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

ExtensionHelper.ExtensionContext.CompleteRequest(new NSExtensionItem[] { resultsItem }, null);
</code></pre>

<p>在我的 javascript 文件中:</p>

<pre><code>var MyExtensionJavaScriptClass = function() {};

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

var ExtensionPreprocessingJS = new MyExtensionJavaScriptClass;
</code></pre>

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

<pre><code>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
</code></pre>

<p>这是模拟器 system.log 包含的内容:</p>

<pre><code>MobileSafari: completed request - items: (
      &#34;&lt;NSExtensionItem: 0x7d798940&gt; - userInfo: {\n    NSExtensionItemAttachmentsKey =   (\n      \&#34;&lt;NSItemProvider: 0x7d78f910&gt; {types = (\\n    kUTTypePropertyList\\n)}\&#34;\n    );\n}&#34;
    )
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>显然,Xamarin.iOS <a href="https://developer.xamarin.com/guides/ios/platform_features/intro_to_app_extensions/offline.pdf" rel="noreferrer noopener nofollow">documentation on app extensions</a>有一些无效的代码。 </p>

<p>如果您查看 <a href="https://www.hackingwithswift.com/read/16/6/hacking-with-javascript-uitextview" rel="noreferrer noopener nofollow">Swift</a> 中的几个示例,您可以看到他们没有使用 <code>"kUTTypePropertyList"</code> 作为标识符,而是使用常量 <code>kUTTypePropertyList</code>。通过一些研究,我在 Xamarin 中找到了等效项:<code>MobileCoreServices.UTType.PropertyList</code>。更换它会解决问题。</p></p>
                                   
                                                <p style="font-size: 20px;">关于javascript - iOS App Extension javascript 参数在 CompleteRequest 之后未定义,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32658492/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32658492/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: javascript - iOS App Extension javascript 参数在 CompleteRequest 之后未定义