私はサファリ拡張機能に取り組んでおり、サファリ拡張機能で同期メッセージの受け渡しを行う方法があるかどうか疑問に思っていました。
注入された JavaScript からグローバル ページにメッセージを送信して、注入された JavaScript に結果が返されるまで待機させたいと考えています。コードをグローバル ページからメッセージを受信する別の関数に分割する必要があるのは、非常に複雑に思えます。
私はサファリ拡張機能に取り組んでおり、サファリ拡張機能で同期メッセージの受け渡しを行う方法があるかどうか疑問に思っていました。
注入された JavaScript からグローバル ページにメッセージを送信して、注入された JavaScript に結果が返されるまで待機させたいと考えています。コードをグローバル ページからメッセージを受信する別の関数に分割する必要があるのは、非常に複雑に思えます。
「特別な」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メッセージの詳細については、開発ガイドを参照してください。
Safari 開発者フォーラムで同じ質問をした人が他にもいました。要するに、できません。(さらに、私の謙虚な意見では、canLoad
関数は純粋にばかげています。)
ただし、クロージャーを使用して、できるだけ痛みをなくすことができます。