html - links without http protocol
The inclusion of the “http:” or “https:” part is partly just a matter of tradition, partly a matter of actually specifying the protocol. If it is defaulted, the protocol of the current page is used; e.g., //www.example.com becomes http://www.example.com or https://www.example.com depending on the URL of the referring page. If a web page is saved on a local disk and then opened from there, it has no protocol (just the file: pseudo-protocol), so URLs like //www.example.com won’t work; so here’s one reason for including the “http:” or “https:” part.
Omitting also the “//” part is a completely different issue altogether, turning the URL to a relative URL that will be interpreted as relative to the current base URL.
The reason why www.example.com works when typed or pasted on a browser’s address line is that relative URLs would not make sense there (there is no base URL to relate to), so browser vendors decided to imply the “http://” prefix there.
Href without http(s) prefix
It's possible, and indeed you're doing it right now. It just doesn't do what you think it does.
Consider what the browser does when you link to this:
href="index.html"
What then would it do when you link to this?:
href="index.com"
Or this?:
href="www.html"
Or?:
href="www.index.com.html"
The browser doesn't know what you meant, it only knows what you told it. Without the prefix, it's going to follow the standard for the current HTTP address. The prefix is what tells it that it needs to start at a new root address entirely.
Note that you don't need the http:
part, you can do this:
href="//www.google.com"
The browser will use whatever the current protocol is (http
, https
, etc.) but the //
tells it that this is a new root address.
URL without http|https
Protocol relative URL
You may receive unusual security warnings in some browsers.
See also, Wikipedia Protocol-relative URLs for a brief definition.
At one time, it was recommended; but going forward, it should be avoided.
See also the Stack Overflow question Why use protocol-relative URLs at all?.
How to search for links without the https protocol in JavaScript
Try replacing
links[i].href.protocol
with
links[i].protocol
Here's an updated Fiddle: https://jsfiddle.net/0kc2qxug/ and some additional information regarding protocol
: http://www.w3schools.com/jsref/prop_anchor_protocol.asp
Absolute (full) URLs without http: in HTML href
It's the same as an absolute URL except that the schema will be the one used for the base URL. Thus, if you say //mysite.com/images/img.png
on an https page, the image will be loaded with https
and on an "ordinary" http page it will be loaded using the http
schema (and, respectively, different default ports.)
This approach lets avoid the security warnings from browsers in the case when you have insecure content loaded by secure pages (and the pages can be loaded using both http and https protocols).
location.href to a link without http://
Since you did not include a protocol (such as for example http), your browser will interpret www.google.com
as a link to http://www.example.com/www.google.com
, since you are currently on http://www.example.com
. Add whatever protocol you want to the href-string, but if you are referring to somewhere else than on the site itself, you must have the protocol.
links without http: like //code.jquery.com/etc
This is a protocol-relative URL. If the page which includes it uses HTTP, then it's HTTP. If the page which includes it uses HTTPS, then it uses HTTPS.
This is convenient so that you can ensure that you don't fetch insecure resources in a secure page (this causes the "mixed content" warning you might have seen), without bothering with the overhead of SSL/TLS in a page which is delivered unencrypted anyhow.
It's similar to how URLs beginning with a single /
are resolved relative to the current protocol and hostname, and URLs with no leading /
or scheme are resolved relative to the current page's directory.
javascript window.open without http://
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);
}
Related Topics
Position an Element Relative to Its Container
How to Close ≪Img≫ Tag Properly
Two Inline-Block, Width 50% Elements Wrap to Second Line
Should a Heading Be Inside or Outside a ≪P≫
How to Set Relative Path to Current Folder
Apply Style to Parent If It Has Child With Css
Style Input Element to Fill Remaining Width of Its Container
How to Post/Submit an Input Checkbox That Is Disabled
What's the Best Way to Set a Single Pixel in an HTML5 Canvas
HTML Attributes for Editorfor() in ASP.NET MVC
How to Center an Unordered List
How Does the Vertical-Align Property Work
Second Line in Li Starts Under the Bullet After CSS-Reset
When Should One Use HTML Entities
How to Create Links With 'Target="_Blank"' in Markdown
Youtube Autoplay Not Working on Mobile Devices With Embedded Html5 Player