Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: download links cannot be refreshed through js #5105

Closed
wants to merge 3 commits into from
Closed

fix: download links cannot be refreshed through js #5105

wants to merge 3 commits into from

Conversation

SEWeiTung
Copy link
Contributor

@SEWeiTung SEWeiTung commented Mar 12, 2023

【Problem】

#5102.

【Reason】

As far as I see, when using 'querySelectorAll', it will first search for the whole page and return you the result directly, sometimes the link name of the element is changed but NOT saved in the storage of querySelector DOM itself.

So A better solution is to search for the element after the DOM frame is loaded without loading the DOM contents...ect.

For more:

  1. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#defer
  2. https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Locating_DOM_elements_using_selectors

1678603843932

Problem:

Reason: As far as I see, when using 'querySelectorAll' will store the
whole page and return you the result directly, so the page should be
fully-loaded. Sometimes there's problems when using
"<Script...beforeInactive>" and I change it to "defer async" so as to
speed up the loading of js files as well as to make sure the whole page
is loaded, we can change the link instead of partially loading.
@SEWeiTung
Copy link
Contributor Author

PS:Another way is to change the querySelector to getElementById(), which will find the real element again and again, no matter whether the page is stored or not (Live in searching). But now it seems to change the loading way of js gets me also fine.

@@ -13,7 +12,7 @@ export default function Document() {
<body>
<Main />
<NextScript />
<Script strategy="beforeInteractive" src="/static/js/legacyMain.js" />
<script src="/static/js/legacyMain.js" defer async />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why removing the Script tag from nextjs? Which kind o tests you made that resulted in this conclusion?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe the customized event handlers' problem for listening after all the other js files of next.js are loaded successfully for querySelectoAll()……I also wonder if it's a better solution?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not really, it's more like the following:

  1. The next/link component takes an href argument, which is pretty much what our JavaScript legacy script does, replace the URL
  2. But the thing is that next/link also sets up "click" events and other kinds of events. These events are managed by a React component, meaning if there's a re-render or whatever the internal logic is, it will ignore our "href" attribute.
  3. Not to mention, "click" event has precedence over "href". So basically, us replacing the "href" probably has no effect at that point in time. Note that I am just making a wild guess here.

But the actual solution is for now to not use next/link, we probably also should not use it for external links, as it was primarily made for internal links.

@ovflowd
Copy link
Member

ovflowd commented Mar 12, 2023

With all due respect, I don't think your PR is fixing anything.

@ovflowd
Copy link
Member

ovflowd commented Mar 12, 2023

@MaledongGit, my concerns here are the following:

  • You seem to be doing many unrelated changes without explaining why.
  • The description of the PR has nothing to do with the changes nor explains why these changes
  • You should know that changing the script to async defer doesn't solve any issue; you're deferring the script's load to be the last JavaScript module to be loaded. This can cause many complications, as we're invoking the script "start" function on the Component mount of' Theme'. By deferring its load, the script may not be available when React attempts to call its start method. The next/script with beforeInitiative type ensures this is the first script to load immediately after Next.js's Framework is loaded (before the Application gets loaded).
  • The bug mentioned in Nodejs download page is acting weird #5102 has nothing to do with the changes of this PR; please read fix: windows download incorrectly selects 32bit on 64bit machine #5025 for context.
  • The screenshot attached to Nodejs download page is acting weird #5102 has an "error" on the console. That is not an error. next/link tries to prefetch routes, but we should not use next/link for external routes.

Please, keep these points in consideration. I'm inclined to close this PR, as it doesn't solve any issues, but I want to hear you out, with your points, on why you changed the props of an unrelated component and the label-for part of the Component.

@SEWeiTung
Copy link
Contributor Author

SEWeiTung commented Mar 13, 2023

why you changed the props of an unrelated component and the label-for part of the Component.

Do you mean "labels["download-for"] ? Ah yes, this is a typo error and it should be this instead of "labels["download"] in i18n. I'm now inverstigating in it and found the problem, just fix it together.

@SEWeiTung
Copy link
Contributor Author

SEWeiTung commented Mar 13, 2023

The screenshot attached to #5102 has an "error" on the console. That is not an error. next/link tries to prefetch routes, but we should not use next/link for external routes.

Ah yes, I also found it later, can I help to change them?

I found there're many external routes in "<Link>", however some of them work properly with console errors, should I change them or just fix this?

@SEWeiTung
Copy link
Contributor Author

In the end, I found it seems we're now having another fix for bugs like this, so I'd close mine.
Thanks!

@SEWeiTung SEWeiTung closed this Mar 13, 2023
@SEWeiTung SEWeiTung deleted the fixJsLoad branch March 13, 2023 01:17
@ovflowd
Copy link
Member

ovflowd commented Mar 13, 2023

Do you mean "labels["download-for"] ? Ah yes, this is a typo error and it should be this instead of "labels["download"] in i18n. I'm now inverstigating in it and found the problem, just fix it together.

Yeah, I wonder why you made the change? 🤔

@ovflowd
Copy link
Member

ovflowd commented Mar 13, 2023

Ah yes, I also found it later, can I help to change them?

I found there're many external routes in "", however some of them work properly with console errors, should I change them or just fix this?

Sure, but I made a PR already hours hours ago hehe

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants