Closed Meet1202 closed 1 year ago
Same hapenning on iOS 15.4. Don’t know about devtools though. But we had similar issue and It was connected to app being PWA - the issue that it did work when dev tools were open.
Hi, I discovered it was happening on iOS 15 only. Everything working fine on iOS 16. Here is a screenshot of the console:
I had this issue with my app - it wasn't loading on Safari 15 or in a Webview on iOS 15 (16 was fine) with a thrown exception about "Can't find variable t..." and an uninformative stack trace.
I tracked it down to forwardRefs - I was using forwardRefs on all my ControlValuAccessors, and removing these (they are unnecessary because they are in the class decorators) resolved this issue. This was across two apps - one Ionic and one Angular material.
So it looks like there's an issue with forwardRefs, at least when defining ControlValueAccessors, in Angular 15, on Safari 15 and iOS 15 webviews.
This was not an issue on Angular14, I only started seeing these errors after I upgraded.
Hi all, I've tracked down the root cause. It's a very subtle bug that got fixed in Safari v16. And yes, the bug doesn't reproduce when the devtools are opened. Here is how I tracked it down:
$o
. Safari stack trace was incorrect.optimization: false
. Fortunately the issue was reproducable even with unoptimized build (making debugging easier):
notification_component_c0
.static #_ = this.ecmp = X
static {}
blocks.static {}
blocks- but static fields.useDefineForClassFields = false
(which is the case in Angular v15 w/ target: 2022)(0, x).method()
in the static field initializer. In other scenarios, the error quickly was gone- almost seeming like it's non-deterministic.this
context when it invokes methods. e.g. for animationsTL;DR: Angular emits valid JavaScript that is subject to a bug in Safari that got fixed in Safari v16. The issue does not reproduce when devtools are opened- and the Safari bug is related to scope tracking in the WebKit JS parsing. https://github.com/WebKit/WebKit/commit/e8788a34b3d5f5b4edd7ff6450b80936bff396f2. All Angular applications could be affected, but hard to notice/narrow down
We will look into downleveling static fields for Safari <16 so that Angular apps remain compatible with that browser, if selected via browserslist (or the default one).
In my understanding, this happened specifically with this component because it's using animations + content projection.
notification_component_c0 = ['*']
variable (outside the class) which breaks WebKit parser's scope analysis.
... but I might be totally wrong 🙃The hardest thing here is to define what are other "similar" situations 😅
@yjaaidi Yes, very close. The static block is an artifact from Angular compiler adding the ecmp
static field. TS with useDefineForClassFields=false
then puts that into a static block. See: https://www.typescriptlang.org/play?target=9&useDefineForClassFields=true#code/MYGwhgzhAEAa0G8BQTpoPYGtoF5oBcAnAVwFMBuVNaCfMfAS2GlOAFsAHXAkiqtWvSYsAJg0LciZSkgC+QA
Then, yes, content projection results in a variable reference from a constant outside of the class. Together with animations which messes up the scope variable tracking- the issue surfaces.
Had a similar issue on Safari Mobile on the iphone. I was able to fix only by reset the browserlistrc to
> 1%
last 2 versions
not ie > 0
not ie_mob > 0
not dead
Had a similar issue on Safari Mobile on the iphone. I was able to fix only by reset the browserlistrc to
> 1% last 2 versions not ie > 0 not ie_mob > 0 not dead
While I was upgrading to Angular v15 browserlistsrc was deleted automatically.
This issue has been automatically locked due to inactivity. Please file a new issue if you are encountering a similar or related problem.
Read more about our automatic conversation locking policy.
This action has been performed automatically by a bot.
Which @angular/* package(s) are the source of the bug?
Don't known / other
Is this a regression?
No
Description
When we open angular.io website in safari browser in mac then it giving blank page and if we do refresh that page than also it's giving blank page and when we open inspect element from developer open in safari browser and do refresh that page then it open perfectly so it's an issue I have provided screenshot.
This when I open angular.io link in Safari browser in Mac.
This when I open inspect element of safari browser and still website is not working.
And at last this after opening Inspect element I refresh the page then website is working properly.
Please provide a link to a minimal reproduction of the bug
https://angular.io
Please provide the exception or error you saw
No response
Please provide the environment you discovered this bug in (run
ng version
)No response
Anything else?
No response