Hello everyone! I have encountered a problem that the print function does not work correctly in any browser on devices with iOS, if you save a web page in PDF format, then the hyperlinks from this page are not saved, they just disappear, maybe this is not very important problem for everyone, but I find this an inconvenient problem.
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
I was able to obtain the URL in iOS 17+ and lower versions by using the browser.tabs.getSelected method in background.js, and it was successful.
I upgraded to iOS 18 and now this function is returning 'Undefined'. As a result, the Safari Extension feature is broken.
Is this browser.tabs.getSelected no longer available or deprecated as of iOS 18?
As an alternative, browser.tabs.query functions. is a useful substitute for that.
We have tested on iPhone 12 Pro and observed that Safari allowed approximately 1.5GB of RAM usage. Page refreshes when trying to allocate more memory. After performing a hard reset and erasing all content, I noticed that Safari allowed approximately 3GB of RAM usage for our webpage. However, after 2-3 days, the maximum allowable RAM usage in Safari decreases to about 1.5GB. Once 1.5GB limit is reached, the system reloads the page.
To further investigate, I performed another hard reset on my device, and once again, Safari allowed around 3GB of RAM usage.
Additionally, we tested this on iPhone 15 Pro and 15 Pro Max, where the RAM limitation in Safari is consistently around 3GB (page is reloading after reaching 3GB).
Could you please clarify why the memory limit fluctuates after hard reset? Is there any specific setting or flag within Safari or iPhone that controls the maximum RAM usage, which could be causing this behavior?
I also posted the issue there: https://bugs.webkit.org/show_bug.cgi?id=277848
I would appreciate any guidance or potential solutions to this issue. If this is a known limitation or issue, understanding the root cause would be extremely helpful.
Thank you for your attention to this matter.
Model Name: iPhone 12 Pro
iOS Version: 17.5.1
Capacity: 128gb
Hi,
We are running a React application as a pod on a Kubernetes cluster with an Nginx Ingress, which needs to make requests to a server running Apache.
On Safari only (all other browsers are fine) and on all browsers on iOS, the React application is unable to get a response from the Apache server. We can see the server is responding and we can see the pod is getting the responses too, they are all logged as 200 on both sides.
Here is what we are able to see in the developer tools on Safari:
The also console logs "Failed to load resource: The network connection was lost."
We have tried solutions such as this and this, as well as many other solutions we could find on various forums but nothing worked so far.
I repeat myself here: this only happens on Safari on desktop and on all browsers on iOS, other browsers such as Chrome and Firefox are unaffected.
Has anyone ever ran into a similar issue or have an idea about how to fix this?
Hello!
I've been maintaining a Cordova-based calling application for years. Cordova uses a webview to show the user interface and has a bridge for calling native iOS API from JavaScript. The application uses CallKit and VoIP push notifications to handle the calling functionality.
Before the iOS 17.5 update, calling worked relatively stable. However, starting from this version and on, Safari instantly force-closes all open websocket connections when the "Answer" button on the calling UI is hit. So, basically, the call ends right after it answers, because in our case websockets are crucial for the SIP negotiation process.
Firstly, I inspected the Safari console, and there is a new red error saying: WebSocket connection to 'wss://home.thirdlane.com/wss' failed: The operation couldn’t be completed. Software caused connection abort.
Secondly, I checked the Xcode logs, and there are several warnings saying Invalidating grant <invalid NS/CF object> failed every time the call is answered.
And, I'm afraid this is all that I have to cling to.
I managed to mitigate the effect by connecting the websockets only when the call is answered and the application is focused. However, this approach has its own drawbacks and doesn't solve all the problematic cases.
I must mention that the behavior has slightly improved in iOS 17.6 – now the websockets are cut after the "Answer" button hit whereas in 17.5.1 they were cut in ~3 seconds after the VoIP push regardless of whether the answer was made.
This looks like a Safari/WebView bug to me and I would like bring it to the Apple's attention. I've never filed a bug before, so hopefully this is the right place to write.
I can provide more logs or vidoes upon request.
Thank you!
Is there a way to detect if the user has tapped on "Turn Off Content Blockers" option on safari in ios or get a callback from the same?
Topic:
Safari & Web
SubTopic:
General
Tags:
Safari Developer Tools
Safari
Safari and Web
Safari Extensions
I am a student at Utah Valley University doing a UX Research project involving spatial web browsing on Safari. I am trying to determine if spatial video and photos would be supported on a safari web page while using the AVP.
I am not a developer, so my knowledge of that front is limited, but I am hoping to get any insight into if that feature would be able to be implemented into a web based experience. If so, what formats would need to be used? Is the MV-HEVC format able to be directly embedded? Or is there another format that needs to be explored?
Any insight is appreciated!
Hi everyone, when My project (Angular 5) running in Safari Browser, we have a download function, it's download the excel file, end with .xlsx, but when running in low version Safari version, it will have a popup, that is not my project did, it blocked be safari itself, you can check the image, my question is how to hide the 'View' button or directly download instead of show the popup?
Topic:
Safari & Web
SubTopic:
General
Tags:
Safari Developer Tools
Safari Services
Safari
Safari and Web
I am experimenting with drag-and-drop on iPadOS.
If I drag a JPEG image from a webpage in Safari to my app, I get items of types public.jpeg and public.url.
Typically, the URL is the URL of the image.
If, however, the image is itself a link, then the URL seems to be the target of the link.
Is there some way that I can always get the URL of the image itself? Is there some way that I can determine whether the URL I have received is the URL of the image or of a link?
We have implemented content blocking using Safari web extension, it blocks the content but after reloading the current page about 3-4 times the blocked content re-appears, how can we fix this issue?
Topic:
Safari & Web
SubTopic:
General
Tags:
Safari Developer Tools
Safari Services
Safari
Safari and Web
I'm encountering a TypeError in FormMetadata.js on Safari, primarily affecting iOS 17.5 and later versions. The error message is as follows:
TypeError: null is not an object (evaluating 'this._logicalFormForControl(e).formElement')
This issue seems to be specific to recent iOS versions, particularly on Safari. Has anyone else experienced this problem or have insights into what might be causing it? Any suggestions for potential workarounds or fixes would be greatly appreciated.
Additional details:
Occurs consistently on iOS 17.5+ devices
Mainly affects Safari browser
Error is thrown in FormMetadata.js
Thank you in advance for any help or information you can provide.
When opening the 3D model in Augmented Reality on Safari, the model initially displays correctly. However, when attempting to move, resize, or rotate it, the device screen freezes along with the Augmented Reality view, and sometimes it crashes the application. This same model does not have any issues when opened in Chrome.
Has anyone experienced something similar, and if so, do you know how to resolve it?
I have a React website that uses getUserMedia to capture user audio. I'm displaying this website in an iOS mobile app using UIWebView in SwiftUI. The audio is correctly captured when the app is in focus. However, when the app goes to the home screen and runs in the background, the microphone audio gets cut off. This issue does not occur when the website is opened in iOS Safari.
Here's my Info.plist and .entitlements file. I granted most, if not all, permissions for both files in an attempt to get it to work, but it still doesn't resolve the issue.
Info.plist
audio
bluetooth-central
bluetooth-peripheral
external-accessory
fetch
location
nearby-interaction
processing
push-to-talk
remote-notification
voip
Entitlements.plist
com.apple.developer.push-to-talk: true
com.apple.developer.spatial-audio.profile-access: true
inter-app-audio: true
There is a change log in Safari 18 Beta mentioning that you can now via MDM control Safari's extensions state and make an extension be enabled after you've installed it - "Added support for Device Management of extension enabled state, private browsing state, and website access on Managed Devices. (113051857)"
However I could not find any documentation for it, I need to know what to set in my plist/mobileconfig file.
Does anyone know (or maybe apple is here as well and can help) where would this be documented?
Thanks!
Are there any Apple Pencil Pro specific events in Mobile Safari? The interesting ones are
hover, so we can know that it is about to touch the screen
squeeze, ideally where we can provide a list of icons and actions to take. Failing that, providing a filter so we can show just the Apple-approved actions that a given web app supports
Hi,
I have developed my extension using React and MUI. The extension works with other browsers but it does not work with Safari. Is there any workaround to make it work with Safari or It is not possible to use React build on Safari.
Thank you.
Hello all, I am have an issue in Safari both for iOS and MacOS where when uploading a file with XMLHttpRequest() progress is not sent in a nice even interval that allows for a smooth upload progress, it is set randomly at large intervals. This means you do not get a smooth nice progress but rather large jumps because the amount of data sent is in large intervals. can see data being constantly sent from the device and at the server level so I know the upload is working.
You can see the problem here: https://imgur.com/a/Qhh3Q8u
I am pretty sure this has to do with the server config and something that is unique to Safari, I am running Nginx 1.27.0 and Php 8.2. This problem does not happen in Chrome or Firefox on my desktop, in those browsers I get a smooth progress and data sent amount. If you have a fast connection you do not notice this problem, slow connections and it's very apparent.
Has anyone figured out what is needed to get this to work properly?
Hi everyone.
I'm reaching out to you to get some help about the issue that I'm facing for last couple of weeks.
The problem is when I have HTML canvas element which is rendering some text which is including some emojis and I'm setting gradient color to that text. I'm expecting that after setting gradient emojis should not change their color, but the reality is that they also become colored. The issue is not reproducible in other major browsers. I'm attaching some screenshots and HTML code for you to have better understanding what I'm trying to achieve.
Thanks in advance.
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style></style>
</head>
<body>
<div id="emojis"></div>
<script>
const emojis = [
0x1f600, 0x1f601, 0x1f603, 0x1f603, 0x1f604, 0x1f605, 0x1f606, 0x1f607, 0x1f609, 0x1f60a, 0x1f642,
0x1f643, 0x1f355, 0x1f354,
];
const emoji = [];
const size = 80;
const factor = 2;
const placeholder = document.getElementById("emojis");
for (let i = 0; i < 3; i++) {
emoji.push({
x: size,
y: size,
src: getEmoji(),
});
}
function loadCanvas(id, emo) {
const canvas = document.createElement("canvas");
canvas.id = id;
placeholder.appendChild(canvas);
const ctx = canvas.getContext("2d");
loadEmoji(canvas, ctx, emo);
}
function loadEmoji(canvas, ctx, emo) {
// Use the intrinsic size of image in CSS pixels for the canvas element
canvas.width = w = size * factor;
canvas.height = h = size * factor;
const fontSize = size * (factor - 0.5);
const offset = Math.floor((h - fontSize) / 4);
ctx.font = `${size * (factor - 0.5)}px Arial`;
ctx.textBaseline = "middle";
ctx.textAlign = "center";
emo.x = w / 2;
emo.y = h - size + offset;
const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);
gradient.addColorStop("0", "magenta");
gradient.addColorStop("0.5", "blue");
gradient.addColorStop("1.0", "red");
ctx.fillStyle = gradient;
ctx.fillText(emo.src, emo.x, emo.y);
}
function getEmoji() {
const len = emojis.length;
const emos = Math.floor(Math.random() * len);
return String.fromCodePoint(emojis[emos]);
}
window.onload = function () {
emoji.forEach((emo, i) => {
const id = `canvas-0${i}`;
loadCanvas(id, emo);
});
};
</script>
</body>
</html>
Hi:
I saw the post WWDC WebKit release notes said Safari will support largeblob extension from version 17. But when I create a credential with largeblob extension, different action takes according what authenticator used.
The credential options is:
"credCreateOptions": {
"rp": {
"name": "WebAuthn demo",
"id": "webauthn.turinggear.com"
},
"user": {
"name": "Jonathon.Runte97@gmail.com",
"displayName": "Jonathon.Runte97@gmail.com",
"id": "bqShD9YGRicjM-1foXiBqrdCzTHTuG1bkmKaxzn7oEM"
},
"challenge": "9BP4y2epk2b3MhRCRRS5tt4bdWYLPJcKBLMMiB_7p7E",
"pubKeyCredParams": [
{
"alg": -7,
"type": "public-key"
},
{
"alg": -257,
"type": "public-key"
}
],
"excludeCredentials": [],
"authenticatorSelection": {
"requireResidentKey": true,
"residentKey": "required",
"userVerification": "discouraged"
},
"attestation": "none",
"extensions": {
"credProps": true,
"largeBlob": {
"support": "preferred"
}
}
}
When i choose use iPhone be my authenticator, it seems that largeblob act as it should be:
"credential" : {
"id": "ZRxBdH4LKE4eiVxbwcA4Kmn9VZk",
"rawId": "ZRxBdH4LKE4eiVxbwcA4Kmn9VZk",
"response": {
"attestationObject": "o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YViYSETDPyxegNfyH_fI_8t9iVRDn34LxYd8YH1k2u4xSk5dAAAAAPv8MAcVTk7MjAtuAgVX170AFGUcQXR-CyhOHolcW8HAOCpp_VWZpQECAyYgASFYICY6gkqg6OG_v1BlGCPj7gSwsu_c0vTmVzmfd7TsqEh5Ilgg_Cn0mAiO8QCx7J1xw809VBq8iI-U5pgY0I947B7XF9g",
"clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiOVcta3RMbEswemZDSXpFb2hNd3E3OTgxQXJlRzV0aEVBdmRHdXNHcUsxcyIsIm9yaWdpbiI6Imh0dHBzOi8vd2ViYXV0aG4udHVyaW5nZ2Vhci5jb20ifQ",
"transports": [
"internal",
"hybrid"
],
"publicKeyAlgorithm": -7,
"publicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJjqCSqDo4b-_UGUYI-PuBLCy79zS9OZXOZ93tOyoSHn8KfSYCI7xALHsnXHDzT1UGryIj5TmmBjQj3jsHtcX2A",
"authenticatorData": "SETDPyxegNfyH_fI_8t9iVRDn34LxYd8YH1k2u4xSk5dAAAAAPv8MAcVTk7MjAtuAgVX170AFGUcQXR-CyhOHolcW8HAOCpp_VWZpQECAyYgASFYICY6gkqg6OG_v1BlGCPj7gSwsu_c0vTmVzmfd7TsqEh5Ilgg_Cn0mAiO8QCx7J1xw809VBq8iI-U5pgY0I947B7XF9g"
},
"type": "public-key",
"clientExtensionResults": {
"largeBlob": {
"supported": true
}
},
"authenticatorAttachment": "platform"
}
Safari returns clientExtensionResults.largeBlob.supported= ture.
But when I use an NFC authenticator with the same credCreateOptions, safari didnot return clientExtensionResults section. Response as follows(ignore the challenge and others random data):
"credential" : {
"id": "uEVMzgsINXj7bHFD5Z5xbMGJ7k6tnrMQSLjB4yB8_0GxbUPoWYUYX8E3D9XB24Cv-PMh6cRpCFt5klUHqsot2Yc48BVu5TN8sbabTgped2x46ljdsxFzaNCA8D2y9FZK8BHLLZTKHNuzJw4SCYUkzg",
"rawId": "uEVMzgsINXj7bHFD5Z5xbMGJ7k6tnrMQSLjB4yB8_0GxbUPoWYUYX8E3D9XB24Cv-PMh6cRpCFt5klUHqsot2Yc48BVu5TN8sbabTgped2x46ljdsxFzaNCA8D2y9FZK8BHLLZTKHNuzJw4SCYUkzg",
"response": {
"attestationObject": "o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YVj0SETDPyxegNfyH_fI_8t9iVRDn34LxYd8YH1k2u4xSk5FAAABeAAAAAAAAAAAAAAAAAAAAAAAcLhFTM4LCDV4-2xxQ-WecWzBie5OrZ6zEEi4weMgfP9BsW1D6FmFGF_BNw_VwduAr_jzIenEaQhbeZJVB6rKLdmHOPAVbuUzfLG2m04KXndseOpY3bMRc2jQgPA9svRWSvARyy2UyhzbsycOEgmFJM6lAQIDJiABIVggg2LXO5Q2U0ETrSxrLKxCfKKCTCitTCx9bpxD1Gw917ciWCDsxnw4Wd7M_UTiGQJ7swCMXN83nprsT8wkTlftXRizmw",
"clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiOUJQNHkyZXBrMmIzTWhSQ1JSUzV0dDRiZFdZTFBKY0tCTE1NaUJfN3A3RSIsIm9yaWdpbiI6Imh0dHBzOi8vd2ViYXV0aG4udHVyaW5nZ2Vhci5jb20ifQ",
"transports": [
"nfc"
],
"publicKeyAlgorithm": -7,
"publicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEg2LXO5Q2U0ETrSxrLKxCfKKCTCitTCx9bpxD1Gw917fsxnw4Wd7M_UTiGQJ7swCMXN83nprsT8wkTlftXRizmw",
"authenticatorData": "SETDPyxegNfyH_fI_8t9iVRDn34LxYd8YH1k2u4xSk5FAAABeAAAAAAAAAAAAAAAAAAAAAAAcLhFTM4LCDV4-2xxQ-WecWzBie5OrZ6zEEi4weMgfP9BsW1D6FmFGF_BNw_VwduAr_jzIenEaQhbeZJVB6rKLdmHOPAVbuUzfLG2m04KXndseOpY3bMRc2jQgPA9svRWSvARyy2UyhzbsycOEgmFJM6lAQIDJiABIVggg2LXO5Q2U0ETrSxrLKxCfKKCTCitTCx9bpxD1Gw917ciWCDsxnw4Wd7M_UTiGQJ7swCMXN83nprsT8wkTlftXRizmw"
},
"type": "public-key",
"clientExtensionResults": {},
"authenticatorAttachment": "cross-platform"
}
Even without a clientExtensionResults.largeBlob.supported= false.
According to w3c, it should return clientExtensionResults.largeBlob.supported= false ?
The NFC authenticaor do support largeblob extensions and act write with the same credCreateOptions on edge on windows.
Does safari need some extra parameters?
My safari is the newest version of 17.5 (19618.2.12.11.6), mac version is Sonoma 14.5(23F79).
Thank you very much.
Here is my manifest.json:
"permissions": [
"<all_urls>",
"storage",
"unlimitedStorage",
"activeTab"
]
Despite declaring "unlimitedStorage" in permissions, I encounter the following error when trying to save files exceeding approximately 3MB:
Invalid call to browser.storage.local.set(). Exceeded storage quota.
This issue did not occur in iOS 17. Is this behavior intentional or is it a bug? If it is intentional, is there an alternative method to handle large file?