如何在iOS共享扩展中处理Javascript的异步完成?

时间:2016-03-27 16:28:24

标签: javascript ios ios-extensions

我正在制作一个可在网页上运行的简单iOS共享扩展程序。它与Pinterest没有什么不同,因为它从页面中获取某些信息。但它与Pinterest的不同之处在于,用于执行抓取的JS有时会自定义为网页域。

所以在ExtensionPreprocessingJS run()函数中我执行以下操作来加载和执行自定义JS:

var Action = function() {};

Action.prototype = {

  run: function(arguments) {
    var e = document.createElement('script');
    e.setAttribute('type','application/javascript');
    e.setAttribute('id','my-unique-id');
    e.setAttribute('src','//mydomain.com/bookmarklet?d='+document.domain);
    document.body.appendChild(e);

    <some code to extract results and generate JSON>

    arguments.completionFunction({ <my JSON here> });
  }
};

var ExtensionPreprocessingJS = new Action

我的bookmarklet端点提供了一些JS,可以从页面中找到&#34;固定&#34;的相关信息。

我的问题是这是异步发生的,而不是在我使用

在run方法结束时传回结果之前
arguments.completionFunction( <my JSON here> );

我已经尝试在调用completionFunction()之前等待设置结果,但扩展似乎将其视为未完全调用的completionFunction()。也就是说,共享扩展框架的设计似乎不适合异步JS。它假设在run()函数返回后,JS的结果可用。

我是否误解了共享扩展设计,或者我是否需要寻找不同的方法来实现这一目标?我注意到Instapaper创建了一个没有原生用户界面的共享扩展程序,而且我&#39;我想知道这是否是他们这样做的原因。

0 个答案:

没有答案