Выполняя отладку, я обнаружил, что это может быть связано с проблемами потока. Когда новый браузер вот-вот откроется, OnAddNewContentsMessage и OnDidCreateScriptContextMessage инициируются одновременно в разных потоках. Если я позволю сначала возобновить поток OnAddNewContentsMessage, который позже создаст новый браузер, OnDidCreateScriptContextMessage будет работать правильно, будучи перехваченным новым браузером, и создаст jsContext, но если я позволю сначала возобновить поток OnDidCreateScriptContextMessage, он не будет перехвачен браузером и jsContext будет создан. Работа в режиме без отладки работает точно так же, как и в последнем случае. Наличие нулевого jsContext приведет к тому, что большинство операций с JsValue вызовут исключение NullPointerException.
Эта проблема возникает только в браузерах, открытых другим браузером с помощью window.open(url). Он отлично работает, если я обновляю браузер или напрямую захожу по URL-адресу (набрав или вставив URL-адрес в адресную строку).
================updated============ Он также отлично работает, если новый браузер открывается по ссылке href. В этом сценарии OnAddNewContentsMessage и OnDidCreateScriptContextMessage инициируются последовательно.