visionOS 2.0 enables passthrough with Metal now:
https://developer.apple.com/wwdc24/10092
This suggests it will be possible for WebXR’s AR passthrough module to be implemented for Safari.
Is this already available, perhaps behind a flag?
Safari
RSS for tagSafari is the web browser developed by Apple and built into all Apple devices.
Posts under Safari tag
200 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
We had developed an iOS Safari web extension (which uses non-persistent background scripts) that functioned properly until iOS 17.3. However, I've encountered inconsistent behavior on iOS 17.4.1, 17.5, and 17.5.1. Upon further debugging, I noticed that the background scripts often become idle and are unloaded frequently. They are not loaded again even for the registered webNavigation events and only trigger when interacting with the extension popup menu. This is also mentioned here.
I had tried this in both manifest versions 2 & 3. I had tried using service_worker for background scripts. But, none of it seems to resolve this issue.
Could you please clarify if this is a bug or an intended behavior?
Our extension relies on webNavigation events without users having to interact with the popup menu often.
This method does not seem to work consistently: SFSafariViewControllerDelegate.safariViewController(_ controller: SFSafariViewController, initialLoadDidRedirectTo URL: URL)
It was working 100% of the time until this week for me, now it has about a 1-5% success rate for detecting redirects.
The docs are not clear:
@discussion This method may be called even after -safariViewController:didCompleteInitialLoad: if
the web page performs additional redirects without user interaction.
Code snippet from calling UIViewController that conforms to SFSafariViewControllerDelegate:
let config = SafariViewController.Configuration()
config.entersReaderIfAvailable = false
let vc = SFSafariViewController(url: url, configuration: config)
vc.delegate = self
self.safariViewController = vc
print(self.safariViewController?.delegate)
self.present(vc, animated: true)
Did something change? How can I make this consistent again?
I'm experiencing a Safari Web Extension issue where the non-persistant background script seems to crash after 30 seconds even when the content script is messaging it.
Here is a minimal-reproducible example. When running in an emulator, the background script will stay responsive forever. However, when running on a physical device, the background script becomes non-responsive after 30 seconds of activity. It never becomes responsive again until I toggle the extensions enable/disable toggle, after which it stays active for 30 seconds and then crashes again.
I have a link that is embedded in the app using WKWebView. This link is working fine in the Macbook Safari browser, But it's not open in iPhone Safari and wkWebView in the app.
Hello there. 👋🏻
Recently I updated macOS and Safari to latest versions. And after that, Safari crashed randomly, but exactly when I open tab in preview by long tab on link.
I tried uninstall all extensions and clean all caches and another trash – it not helps me.
Any idea?
Thank you in advance!
I have an extension that opens the start page after installation with the URL:
safari-web-extension://my-web-extension-page.html
It's not possible on this page to open any link on a new tab if the link has attribute target="_blank" or even with "Command (⌘) + click" combination
Are there any restrictions on pages with protocol safari-web-extension://?
Doing some testing around player behaviour when a license expires in Safari on MacOS. I had the following outcomes:
On Safari 17.4.1 on an intel based Mac running Ventura, playback stopped when the license expired.
On Safari 17.4.1 on an M3 running Sonoma, playback stalled briefly, and then continued to play unlimited.
On Safari 16.5.2 on an M2 running Ventura, playback stalled briefly, and then continued to play unlimited.
When playback stalled briefly, was at the time the license expired.
I parsed the license and everything is set correctly for a lease license type:
{
"version" : 1,
"payloadLength" : 1072,
"iv" : "0H9NCXLQeh1ziYpmJXsnwQ==",
"assetId" : "䙁㉌䉃\u0000\u0000\u0000",
"hdcp" : "TYPE_0_REQUIRED",
"contentKeyDuration" : {
"leaseDurationSeconds" : 300,
"rentalDurationSeconds" : 0,
"persistenceAllowed" : false
},
"keyType" : "Lease"
}
I cannot find any information relating to this behaviour.
Per the docs for FPS, a lease license type: If the content key is not renewed, the Apple device stops the playback when the lease expires. Which is what is observed on the intel based macbook.
I'm working on an Angular application that retrieves static data (JSON, MP3, and images) from a backend server, with a cache control response header set to Cache-Control: public, max-age=2592000. I expect these files to be served from either disk or memory cache after the initial request. However, in Safari, the browser sometimes fetches the data from the cache and other times makes a network call. This inconsistent behavior is particularly noticeable with MP3 files, whereas JSON and image files are consistently served from the cache as expected.
I've tested this on multiple Safari versions and observed the same issue:
Version 17.2 (19617.1.17.11.9)
Version 17.1 (19616.2.9.11.7)
Version 17.3 (19617.2.4.11.8)
I confirmed that the "Disable Cache" option is not enabled in the developer tools, so the MP3 files should be cached. This functionality works correctly in Chrome and Firefox without any issues.
【現象】
Safariブラウザでcanvasに対して任意の描画をした後、clearRect()を実行します。
その後、canvasの親divに対して visibility: hidden を設定すると、消したはずの描画が復活します。
但し、親divは正常に visibility: hidden が働いているので描画されなくなります。
また、この現象はブラウザの拡大率が影響をしているようです。
少なくとも後述のリスト内のMacbookAirでは、拡大率が100%の場合にのみ発生しています。
この現象は過去のバージョンでは起きてないようです。
このバグを修正する予定はありますか?
【機種】
機種は以下のリストを確認してください。
Model
OS&Version
Y/N
version
MacbookAir M2 2022
macOS Sonoma 14.4.1
y
17.4.1
Mac Studio 2022 Apple M1 Max
macOS Monterey 12.5
n
16.0
MacBook Air M1 2020
macOS Sonoma 14.3.1
n
17.3.1
iPadPro gen6
iPadOS 17.4.1
y
-
iPad gen10
iPadOS 17.4.1
n
-
【デモ】
現象を確認するためのデモは以下のHTMLファイルを保存してブラウザで開いてください。
再現手順はボタンを draw -> clear -> hide の順番に押してください。
黄色の親divが非表示になるのに対し、canvasからclearしたはずの黒い四角が表示されます。
<html>
<body onload="onLoad()">
<div id="parent" style="background-color: yellow;">
<canvas id="canvas"></canvas>
</div>
<button onclick="drawCanvas()">draw</button>
<button onclick="clearCanvas()">clear</button>
<button onclick="showCanvas()">show</button>
<button onclick="hideCanvas()">hide</button>
<script>
let parent
let canvas
let context2d
function onLoad() {
parent = document.getElementById("parent")
canvas = document.getElementById("canvas")
context2d = canvas.getContext('2d')
}
function drawCanvas() {
context2d.fillRect(0, 0, 100, 100)
}
function clearCanvas() {
context2d.clearRect(0, 0, canvas.width, canvas.height)
}
function showCanvas() {
parent.style.visibility = "visible"
}
function hideCanvas() {
parent.style.visibility = "hidden"
}
</script>
</body>
</html>
If you write about multiple lines when entering code into the prompt, it will be open, but there is no way to check the topmost written code.
It does not expose 1 to 3 lines, nor does it provide scrolling.
I think it should work like Google Chrome or there should be a way to solve this within safari.
If there's any way I don't know, please help.
Hello,
Element with position: fixed; bottom: 0; code is being cut on iPhone Safari Preview mode, when application snippet is present. Clicking “x” or scrolling down repairs it.
I am not quite sure how to fix and develop it. Fixing this bug is very problematic, since this preview mode is not possible to recreate on Mac/PC.
I am trying to develop website that can upload instagram story from web.
I opened the Instagram app and even opened the story upload pop-up.
but, I can't send Image Data.
I need your Help....
source_application is detected at instagram,
but backgroundImage is not sent at instagram.
How can I send.......
because
I want to implement in-app purchases for my Mac Safari web extension.
I can think of two ways:
Draw the payment UI in an extension web page, and send a message to the native extension app to call StoreKit code.
Open the container app from an extension web page, where the app draws the payment UI.
I couldn't make #1 work with either
StoreKit 2, which is async, and context.completeRequest(returningItems:) doesn't want to be called in a Task, saying context is not sendable)
or StoreKit 1, where calling context.completeRequest(returningItems:) in paymentQueue(_:updatedTransactions:) for some reason doesn't return a response to the extension's web page.
I couldn't make #2 work because I couldn't find a way to open the container app from the web extension. I registered a custom URL for my container app, but context.open that url does nothing.
Web extensions that use IAP with #2 are available on the Mac app store, so it must be possible, could anyone shed some light on how to open the container app and pass the purchased info to the extension web page even if the container app is not open?
Thanks in advance.
I am re posting this issue, as a solution still hasn't been provided.
please see this original feedback ticket for all the details FB13744621
Any solution or workaround would be appreciated.
Thanks
I created a PWA that requires access to users' geolocation to perform a certain action in the system. The correct operation would be the user opens the application, and then the operating system prompts them to allow sharing their exact location with the PWA. However, this is not happening with a few users who have iPhone 11 or XR.
I tested it on iPhones 14, 13, 11 Pro, and even iPhone 6, and it works as expected. I directly spoke with a user who was experiencing the problem and conducted some tests.
I checked if location access was allowed in the settings.
I verified if Safari was accepting with the option to always ask selected.
In the settings of my system's website, I checked if location access was allowed with the option to always ask chosen.
We changed all prompting options to allow.
We opened the following site https://whatpwacando.today/ and found that geolocation was also not possible.
Everything indicates that the issue lies with these users' phones; however, other geolocation methods work fine, as other geolocation apps function properly. This leads me to think that it might be a problem with Safari not working properly with the HTML Geolocation API.
I'm not sure if there are any more advanced settings that could help or if anyone else has encountered this issue.
Hi Apple Team,
We have a PWA which supports downloading and playback for audio and video content. Downloaded content is stored in IndexedDB in the form of blobs and blob URLs are generated on runtime through which content is played.
We have observed that the blob URLs have stopped working on iOS 17.4.1. They work on iOS 17.4 and iOS 17.3 as well.
This feature is very critical for us as it is the heart of the offline mode of the app.
Thanks!
Hello,
I have noticed an issue when using my web application via TestFlight on iOS devices. When I try to print through the application, a message "This action will take you outside the app, press OK to continue" appears. This message prevents the user from printing documents from the application.
Steps to reproduce the issue:
Open my web application via TestFlight on an iOS device.
Press the print button in the application.
Expected behavior:
It is expected that the user can print documents from the web application via TestFlight without any obstacles.
Actual behavior:
When pressing the print button, a message "This action will take you outside the app, press OK to continue" appears, preventing printing.
Input number always on the bottom for some reason. it's on display flex and before ios 17.4 it worked fine.
I'm currently trying to add an OIDC connection to an iOS application. I'm using AppAuth, which will use ASWebAuthenticationSession (because we're targeting recent versions of iOS).
We have a login web page that will write a cookie. We'd like this cookie to be shared between the application (using ASWebAuthenticationSession) and the system browser (Safari) so that the user can be recognized and avoid having to log in again.
The web page writes a permanent cookie (with an expiry date) and the iOS application uses ASWebAuthenticationSession. And I did not set prefersEphemeralSession to true.
So we should be OK with the documentation (SFSafariViewController no longer shares cookies, and session cookies are not shared between ASWebAuthenticationSession and Safari).
It should work, if I understand the documentation correctly. Did I miss a point? Or is it a known problem?
I also tried to create a simple web page that read and write a cookie to do dome tests.
function writeCookie() {
var value = "something";
var maxAge = "max-age=" + (365 * 24 * 60 * 60);
var expiration = new Date();
expiration.setTime(expiration.getTime() + (365 * 24 * 60 * 60 * 1000));
var expires = "expires=" + expiration.toUTCString();
var sameSite = "SameSite=None";
var secure = ";Secure";
document.cookie = cookieName + "=" + value + ";" + maxAge + ";path=/;" + sameSite + secure;
}
function readCookie() {
var cookies = document.cookie.split(';');
var value = "";
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.indexOf(cookieName) == 0) {
value = cookie.substring(cookieName.length + 1, cookie.length);
break;
}
}
if (value !== "") {
alert("Cookie value : " + value);
}
}
And iOS code:
currentAuthorizationFlow = OIDAuthState.authState(byPresenting: request, presenting: viewController) { authState, error in
if let authState = authState {
print("Authorization succeed")
self.authState = authState
if let accessToken = authState.lastTokenResponse?.accessToken, let idToken = authState.lastTokenResponse?.idToken {
completion(.success(TokenResponse(accessToken: accessToken, idToken: idToken)))
return
}
}
self.authState = nil
completion(.failure(error))
}