我正在制作一个可在网页上运行的简单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;我想知道这是否是他们这样做的原因。