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("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);
</code></pre>
<p>在我的 javascript 文件中:</p>
<pre><code>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;
</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: (
"<NSExtensionItem: 0x7d798940> - userInfo: {\n NSExtensionItemAttachmentsKey = (\n \"<NSItemProvider: 0x7d78f910> {types = (\\n kUTTypePropertyList\\n)}\"\n );\n}"
)
</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]