[ACCEPTED]-Adding a target="_blank" with execCommand 'createlink'-execcommand
I was able to find a solution. Don't know 4 if this is the right way to go, but it works. Following 3 https://stackoverflow.com/a/5605841/997632, this is what I used for my code to work:
function addLink() {
var linkURL = prompt('Enter a URL:', 'http://');
var sText = editorWindow.document.getSelection();
editorWindow.document.execCommand('insertHTML', false, '<a href="' + linkURL + '" target="_blank">' + sText + '</a>');
}
Just 2 in case anyone else is looking and stumbles 1 upon this...
insertHTML can be frustrated if you have 2 a bold or italic before. I use the following 1 approach:
var url = 'example.com';
var selection = document.getSelection();
document.execCommand('createLink', true, url);
selection.anchorNode.parentElement.target = '_blank';
I know this thread is quite old, but let 12 me throw my 2 cents in, and maybe someone 11 will find this useful ;) I'm working on 10 a WYSIWYG editor too As I found the accepted 9 solution fails for me when I try to make 8 a link from a selected image in FF (the 7 getSelection().getRangeAt(0) returns the 6 image's parent div and treats the image 5 as it never wasn't there (this is how I 4 see it)), here's a dirty but working (and, I 3 think, it's turbo-cross-browser) idea I 2 came up with (jQuery):
//somewhere before losing the focus:
sel = window.getSelection().getRangeAt(0);
//reselecting:
window.getSelection().addRange(sel);
//link:
document.execCommand('createLink', false, 'LINK_TO_CHANGE');
$('a[href="LINK_TO_CHANGE"').attr('target', '_blank');
//any other attr changes here
$('a[href="LINK_TO_CHANGE"').attr('href', theRealHref);
Is it good idea? Works 1 like a charm. And this simplicity ^^
Since, there is no straightforward cross-browser 3 solution, one cross-browser workaround could 2 be programatically attaching an event handler 1 to a
inside your editor:
var aLinks = Array.prototype.slice.call(editorElement.querySelectorAll('a'));
aLinks.forEach(function(link) {
link.addEventListener('click', function() {
window.open(link.href, '_blank');
});
});
Nobody seems to mention that as per specs, the 2 document
has to be in the design mode:
document.designMode = "on";
Then the following 1 should work:
var url = 'http://google.com';
var selection = document.getSelection();
document.execCommand('createLink', true, url);
The execCommand'createLink' does not always work. It will sometimes 4 wrap the link text inside a link.
i.e
<a><a href="">label</a></a>
Resulting 3 the html link code appearing in the document 2 and the link not working.
in this case ues 1 execCommand 'insertHTML'
val=`<a href="`+val+`" target="_blank">`+label+`</a>`
//document.execCommand('createLink', false, val);
document.execCommand('insertHTML', false, val);
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.