我正在进行Safari扩展,我想知道是否有办法在Safari扩展中进行同步消息传递。
我想从我注入的javascript向全局页面发送一条消息,注入的javascript等待返回结果。必须将我的代码拆分为另一个从全局页面接收消息的函数,这似乎过于复杂。
答案 0 :(得分:4)
您可以使用“特殊”canLoad
消息。从技术上讲,它旨在发送消息并返回与页面上的元素是否可以加载相关的值,但它实际上只是一个同步消息,由全局HTML页面以与其他任何方式相同的方式回答。您只需查找名为'canLoad'
的消息,而不是传递自定义消息名称:
// injected script
var myVar = safari.self.tab.canLoad( event );
// global HTML file
<!DOCTYPE html>
<script type="text/javascript" charset="utf-8">
safari.application.addEventListener( 'message', listen, true );
function listen( msgEvent ) {
switch( msgEvent.name ) {
case 'canLoad':
msgEvent.message = 'My return value';
break;
}
}
</script>
您可以在开发指南中详细了解 canLoad 消息。
答案 1 :(得分:0)