The userscript causes interference with itself when it is opened on multiple tabs simultaneously

I'm facing an issue with Greasemonkey 3.17 on FF56 and Tampermonkey on Vivaldi that doesn't seem to have any solution on Google.

Here's an example script:

// ==UserScript==
// @name        stackoverflow.com
// @namespace   siod87gbnwf87rnsfdkn
// @include     https://stackoverflow.com/*
// @version     1
// ==/UserScript==

alert(1);
alert(2);

It's a simple script that should display one message box followed by another after clicking OK. The issue arises when performing the following steps:

  • Visit stackoverflow.com

  • Open a question in a new tab using the middle mouse button twice rapidly, so that the second tab opens as the first one is still loading

Both tabs will display "1" in the popup box, but you'll notice that upon clicking OK on the first tab, the script pauses until you click OK on the second tab as well. Only after dealing with both popups from the second tab will the alert on the first tab trigger.

Why aren't the scripts running independently of each other? This behavior isn't specific to alert, as I've encountered the same issue with more complex scripts. However, for demonstration purposes, the alert function illustrates the problem effectively.

Answer №1

What is the reason scripts cannot run independently from one another?

Scripts are considered to run separately as they do not share the global scope. However, certain blocking actions like the alert function are controlled by the browser itself, and the sequence of execution is not defined in the ECMAScript standard.

To avoid this issue, it is recommended to refrain from using blocking functions such as alert. Instead, opt for non-blocking methods like console.log or console.info for displaying output.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Tips for extracting HTML entities from a string without altering the HTML tags

I need assistance with removing HTML tags from a string while preserving html entities like &nbps; & é < etc.. Currently, I am using the following method: stringWithTag = "<i> I want to keep my ->&nbsp;<- element space, bu ...

Tips for customizing the appearance of the day button in a React Material-UI date picker

In my React project, I am using material-ui date picker and I am looking for a way to customize the styling of the day buttons. Specifically, I want to change the text color of the available days. By default, as seen in the screenshot, the text color is bl ...

Issue with Vue.js Typescript when setting a debounced function

Upon debouncing a function in my Vue.js application, I encountered the following error message: Type 'DebouncedFunc<(queryParams: QueryParams, page?: number) => Promise<void>>' is not assignable to type '(queryParams: QueryPa ...

Struggling with Blob image URLs in Next.js? Here's a solution!

Is there a solution for using blobs in next.js? I was previously able to use blob URLs with img tags, but now when I try to use the Image component, the blob URL doesn't work. I attempted to add the blob domain: domains: ['softflixprodstorage.bl ...

Retrieval of jQuery remove() method

Essentially, I am utilizing an OnClick function to delete a DIV. Once the OnClick is triggered, it invokes the remove() jQuery function to eliminate the div. Below is my code that implements the removal using remove(): <div id="add"> <button typ ...

socket.io, along with their supporting servers

Can socket.io function separately from being the webserver? I prefer to utilize an external webserver, but in order for it to function properly I require /socket.io/socket.io.js. Is there a method other than duplicating[1] this file? I want to avoid comp ...

Three.js Image Processing with Effect Composer

After reviewing the example located at: I am intrigued by the possibility of applying post-processing effects on a duplicate of the initial data set. Essentially, I am interested in showcasing the original rendering of my scene in one container while simu ...

Error message: The variable THREE has not been defined in a Rails Project utilizing the threejs-rails gem

Currently, I am working on a project using Ruby on Rails and incorporating three.js. I have successfully installed the corresponding gem, and everything appears to be functioning properly. However, an error is being thrown in the JavaScript: Uncaught Refe ...

Learn the simple technique for creating smooth 3D object animations when clicking using Three.JS

As someone who is just beginning to explore Three.JS and 3D web development, I am eager to recreate a specific action that I saw in this video: https://www.youtube.com/watch?v=HWSTxPc8npk&feature=youtu.be&t=7s. The concept involves a group of 3D pl ...

Using JavaScript to analyze and handle newlines, spaces, and the backslash character

Hello everyone, I'm hoping things are going well. I am currently working on removing newline and "\" characters from a string that I have after using JSON.stringify(). The string in question appears as follows: "[{\n \"id_profile&bs ...

Webpack does not support d3-tip in its current configuration

I'm having some trouble getting d3-tip to work with webpack while using TypeScript. Whenever I try to trigger mouseover events, I get an error saying "Uncaught TypeError: Cannot read property 'target' of null". This issue arises because th ...

Leverage the PhantomJS variable within the page.evaluateJavaScript function

Currently, I am using PhantomJS to capture a screenshot of the dashboard and save it as a PNG file. Everything works perfectly fine until I try to include additional arguments (line, dFrom, dTo) and use them within the page.evaluateJavaScript() function. U ...

Getting js.map Files to Function Properly with UMD Modules

I am experiencing an issue with debugging TypeScript files in Chrome and Firefox. Specifically, when trying to debug the MapModuleTest.ts file, the debugger seems to be out of sync with the actual JavaScript code by two lines. This discrepancy makes settin ...

Manipulating DropDownList Attributes in ASP.NET using JavaScript

I am facing an issue with populating a Dropdownlist control on my ASCX page. <asp:DropDownList ID="demoddl" runat="server" onchange="apply(this.options[this.selectedIndex].value,event)" onclick="borderColorChange(this.id, 'Click')" onblur="bo ...

showcasing real-time webcam information within an HTML web application

I have successfully integrated my webcam data live into my web application using the following code snippet. The live feed from my webcam is now visible on the webpage. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...

Issues have been raised with IE11's refusal to accept string(variable) as a parameter for the localStorage

Why is it that Internet Explorer does not recognize a string variable as a parameter for the setItem method, even though it works fine in Chrome? For example, in IE: This code snippet works: var itemName = 'anyname'; localStorage.setItem(itemN ...

Tips for converting a URL to the correct route in emberjs when the location type is set to history

After creating a basic Ember.js application and setting the router location type to 'history', I encountered an issue with the generated URLs. Instead of the expected URL format like http://localhost/#/post/1, the Ember.js application was changi ...

Having trouble generating an array for checkboxes using jQuery, AJAX, and PHP

I'm almost there, but there's something missing. I'm attempting to send variables from multiple checkboxes to a PHP page using jQuery. This is my code: <div id="students"> <div class="field"> <label> ...

When initializing React Native, the Android, iOS, and app folders seem to be missing

https://i.sstatic.net/bkmvE.png Where have my android, ios, and app folders gone? Also, why are the index js files missing? I am currently working with React Native version 0.1.10 on a Windows 7 operating system. ...

Is there a way for me to obtain a selection of 20 random items from this JSON data

When working with my JSON data using Myjson.slice(1, 20), I encountered a situation where I needed to extract only 20 items from a dataset that had a length of 2624. In the code snippet provided, I attempted to use the slice method but struggled to differe ...