Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

javascript window.open without http://

Tags:

javascript

I have a small tool build with Delphi that collects url's from a file or from the clipboard, and than builds a file called test.htm with a content like this :

<!DOCTYPE html> 
<html> 
<body> 
    <p>Click the button retrieve the links....</p> 
    <button onclick="myFunction()">Click me</button> 
    <p id="demo"></p> 
    <script> 
        function myFunction() { 
            window.open('http://www.speedtest.net/', '_blank');
            window.open('www.speedtest.net/', '_blank');
            and so on...
        }
    </script> 
</body>
</html>

The idea is to click on the button, and then a new tab (or window) is created for every url inside myFunction. This works, but with one small problem.

In the code example there are 2 url's, one with the http:// prefix and one without it. The first url works as expected and creates a new tab (or window) with the following url:

http://www.speedtest.net

The second 'window.open' does not work as I expected. This 'window.open' will create the following url in the new tab (or window)

file:///c:/myApplicaton/www.speedtest.net

As you have already figured out, the application is an executable in c:\myApplication

So my question(s) is, is there a way to use 'window.open' to create a new tab (or window) without putting the path of the application in front of the url ? If this is not possible with 'window.open', is there another way to do this ?

Or is the only way to do this to have the application put the http:// in front of every url that does not have it already ?

like image 836
GuidoG Avatar asked Apr 16 '15 19:04

GuidoG


People also ask

How do I open a new window in JavaScript?

You can use JavaScript to launch a new window. The window. open() method, which allows you to open up new browser window without navigating away from the current page. It is useful when you need to display some popup advertisement or the instructions without navigating away from the current window.

Is window open Noopener Noreferrer?

That's where noopener and noreferrer come in. The values noopener and noreferrer belong to the rel attribute, and they tell the browser NOT to set the window. open property when opening a link in a new tab/window.

How do I make a link open in a new window?

Open in a new window To open a link in a new browser window, hold the Shift on then click the link or right-click the link and select Open link in New Window.


2 Answers

As you suggested, the only way is to add the http protocol to each URL which is missing it. It's a pretty simple and straightforward solution with other benefits to it.

Consider this piece of code:

function windowOpen(url, name, specs) {
    if (!url.match(/^https?:\/\//i)) {
        url = 'http://' + url;
    }
    return window.open(url, name, specs);
}

What I usually do is to also add the functionality of passing specs as an object, which is much more manageable, in my opinion, than a string, even setting specs defaults if needed, and you can also automate the name creation and make the argument optional in case it's redundant to your cause.

Here's an example of how the next stage of this function may look like.

function windowOpen(url, name, specs) {
    if (!url.match(/^https?:\/\//i)) {
        url = 'http://' + url;
    }
    // name is optional
    if (typeof name === 'object') {
        specs = name;
        name = null;
    }
    if (!name) {
        name = 'window_' + Math.random();
    }
    if (typeof specs === 'object') {
        for (var specs_keys = Object.keys(specs), i = 0, specs_array = [];
                i < specs_keys.length; i++) {
            specs_array.push(specs_keys[i] + '=' + specs[specs_keys[i]]);
        }
        specs = specs_array.join(',');
    }
    return window.open(url, name, specs);
}
like image 186
iMoses Avatar answered Nov 02 '22 23:11

iMoses


I think the best way would be to add "//" + url In this case - it isn't important, what protocol (http or https) you expect to receive as a result.

url = url.match(/^https?:/) ? url : '//' + url;
window.open(url, '_blank');
like image 38
sergioneli Avatar answered Nov 03 '22 01:11

sergioneli