Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Welcome to Software Development on Codidact!

Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.

Comments on Why does a keydown event is listened only once?

Post

Why does a keydown event is listened only once?

+1
−1

The following code (credit for user:hkotsubo) moves the user to another page if Alt+Shift+E are pressed together.

window.addEventListener('DOMContentLoaded', () => {
  let domain = window.location.host;
  let protocol = window.location.protocol;
  let h1 = document.querySelector("h1");

  window.addEventListener('keydown', function(event) {
      if (event.altKey && event.shiftKey && event.key === 'E') {
          window.location.href = `${protocol}//${domain}/index.php?title=${h1.innerText}&action=edit`;
      }
  });
});

I have the problem that the code can only run once.
Even if I run it from a user script manager so it's always in the background, still, I can use it to move a user to the edit page only once per page load, so if I want to use it again I have to refresh the page.

Why is this problem happening and how would you suggest to solve it?

History
Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

1 comment thread

How would it run multiple times? (5 comments)
How would it run multiple times?
Peter Taylor‭ wrote almost 2 years ago

I'm having trouble understanding what the problem is. The code navigates away from the page, so how could it possibly be triggered twice?

deleted user wrote almost 2 years ago · edited almost 2 years ago

Hello Peter.

I am sorry, I don't understand what you mean by "navigates away from the page".

I just want to listen the event all the time I use the webpage in which this code is being run (by a user script manager).

Skipping 2 deleted comments.

Peter Taylor‭ wrote almost 2 years ago

Setting the value of window.location.href navigates to the provided URL. Doesn't that mean that you're now on a different page, so there is no opportunity to trigger the same handler twice?

elgonzo‭ wrote almost 2 years ago · edited almost 2 years ago

What is the match pattern you are using in your userscript manager to load your script?

Note that the match pattern has to match whatever URL ${protocol}//${domain}/index.php?title=${h1.innerText}&action=edit evaluates to. Otherwise, when your browser navigates to this URL (which is effectively a page load), the userscript manager won't apply the script. (Also pay attention to any URL redirection, whether it being HTTP redirects or some javascript in the page doing a redirection / loading of a page with a different URL. The target URL of a redirect would also need to be matched by your userscript's match pattern so that your the userscript manager will apply the script.)

deleted user wrote almost 2 years ago

Peter Taylor‭ indeed but I think I had a case were the script opened a new tab and then I had to refresh the page to use it but I can't reproduce, so it's some strange situation in the middle of the work which no longer happens.

@elgonzo the match pattern is https://example.com/* but the problem no longer occurs.

This thread may better be locked (if comments stay in place and don't get auto deleted), or otherwise deleted.