fix(core): use postMessage IPC for remote URLs on iOS ref #7751 (#7764)

This commit is contained in:
Lucas Fernandes Nogueira 2023-09-06 16:09:01 -03:00 committed by GitHub
parent 0d63732b96
commit b7f53d66e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 13 deletions

View File

@ -2,4 +2,4 @@
"tauri": patch:bug "tauri": patch:bug
--- ---
Fixes IPC failing to communicate for remote URLs on macOS. Fixes IPC failing to communicate for remote URLs on macOS and iOS.

View File

@ -30,7 +30,7 @@
cmd === fetchChannelDataCommand || cmd === fetchChannelDataCommand ||
!(osName === 'linux' || osName === 'android') !(osName === 'linux' || osName === 'android')
) && ) &&
!(osName === 'macos' && location.protocol === 'https:') !((osName === 'macos' || osName === 'ios') && location.protocol === 'https:')
) { ) {
const { const {
contentType, contentType,

View File

@ -21,7 +21,7 @@ use crate::{
}; };
pub(crate) mod channel; pub(crate) mod channel;
#[cfg(any(target_os = "macos", not(ipc_custom_protocol)))] #[cfg(any(target_os = "macos", target_os = "ios", not(ipc_custom_protocol)))]
pub(crate) mod format_callback; pub(crate) mod format_callback;
pub(crate) mod protocol; pub(crate) mod protocol;

View File

@ -20,7 +20,7 @@ use super::{CallbackFn, InvokeBody, InvokeResponse};
const TAURI_CALLBACK_HEADER_NAME: &str = "Tauri-Callback"; const TAURI_CALLBACK_HEADER_NAME: &str = "Tauri-Callback";
const TAURI_ERROR_HEADER_NAME: &str = "Tauri-Error"; const TAURI_ERROR_HEADER_NAME: &str = "Tauri-Error";
#[cfg(any(target_os = "macos", not(ipc_custom_protocol)))] #[cfg(any(target_os = "macos", target_os = "ios", not(ipc_custom_protocol)))]
pub fn message_handler<R: Runtime>( pub fn message_handler<R: Runtime>(
manager: WindowManager<R>, manager: WindowManager<R>,
) -> crate::runtime::webview::WebviewIpcHandler<crate::EventLoopMessage, R> { ) -> crate::runtime::webview::WebviewIpcHandler<crate::EventLoopMessage, R> {
@ -125,7 +125,7 @@ pub fn get<R: Runtime>(manager: WindowManager<R>, label: String) -> UriSchemePro
}) })
} }
#[cfg(any(target_os = "macos", not(ipc_custom_protocol)))] #[cfg(any(target_os = "macos", target_os = "ios", not(ipc_custom_protocol)))]
fn handle_ipc_message<R: Runtime>(message: String, manager: &WindowManager<R>, label: &str) { fn handle_ipc_message<R: Runtime>(message: String, manager: &WindowManager<R>, label: &str) {
if let Some(window) = manager.get_window(label) { if let Some(window) = manager.get_window(label) {
use serde::{Deserialize, Deserializer}; use serde::{Deserialize, Deserializer};
@ -241,7 +241,7 @@ fn handle_ipc_message<R: Runtime>(message: String, manager: &WindowManager<R>, l
match &response { match &response {
InvokeResponse::Ok(InvokeBody::Json(v)) => { InvokeResponse::Ok(InvokeBody::Json(v)) => {
if !cfg!(target_os = "macos") if !(cfg!(target_os = "macos") || cfg!(target_os = "ios"))
&& matches!(v, JsonValue::Object(_) | JsonValue::Array(_)) && matches!(v, JsonValue::Object(_) | JsonValue::Array(_))
{ {
let _ = Channel::from_ipc(window.clone(), callback).send(v); let _ = Channel::from_ipc(window.clone(), callback).send(v);
@ -254,12 +254,12 @@ fn handle_ipc_message<R: Runtime>(message: String, manager: &WindowManager<R>, l
} }
} }
InvokeResponse::Ok(InvokeBody::Raw(v)) => { InvokeResponse::Ok(InvokeBody::Raw(v)) => {
responder_eval( if cfg!(target_os = "macos") || cfg!(target_os = "ios") {
&window, responder_eval(
format_callback_result(Result::<_, ()>::Ok(v), callback, error), &window,
error, format_callback_result(Result::<_, ()>::Ok(v), callback, error),
); error,
if cfg!(target_os = "macos") { );
} else { } else {
let _ = let _ =
Channel::from_ipc(window.clone(), callback).send(InvokeBody::Raw(v.clone())); Channel::from_ipc(window.clone(), callback).send(InvokeBody::Raw(v.clone()));

View File

@ -1029,7 +1029,7 @@ impl<R: Runtime> WindowManager<R> {
app_handle.clone(), app_handle.clone(),
)?; )?;
#[cfg(any(target_os = "macos", not(ipc_custom_protocol)))] #[cfg(any(target_os = "macos", target_os = "ios", not(ipc_custom_protocol)))]
{ {
pending.ipc_handler = Some(crate::ipc::protocol::message_handler(self.clone())); pending.ipc_handler = Some(crate::ipc::protocol::message_handler(self.clone()));
} }