8

I need to make all the links from a text open a new tab, and the text come from dangerouslySetInnerHTML={{__html: content,}}. the code is in a new class that extends component in react the block of code where i pick the text id in < section>

Javi Magaldi
  • 85
  • 1
  • 1
  • 4

7 Answers7

17

Just add rel="noopener noreferrer" will fix your problem.

https://caniuse.com/?search=noopener%20

<a href="https://hasantezcan.dev" target="_blank" rel="noopener noreferrer">Go to website</a>

source

Hasan Tezcan
  • 1,116
  • 1
  • 11
  • 23
9

Here is my solution using replace

var content = `<a href="https://stackoverflow.com">Stack Overflow</a><a href="https://google.com">Google</a>`;

class App extends React.Component {

  render(){
    return (
      <div 
          dangerouslySetInnerHTML={{
              __html: content.replace(/href/g, "target='_blank' href")
          }}>
      </div>
    )
  } 
}
95faf8e76605e973
  • 13,643
  • 3
  • 24
  • 51
4

Security

When you use target="_blank" with Links, it is recommended to always set rel="noopener" or rel="noreferrer" when linking to third party content.

  • rel="noopener" prevents the new page from being able to access the window.opener property and ensures it runs in a separate process. Without this, the target page can potentially redirect your page to a malicious URL.

  • rel="noreferrer" has the same effect, but also prevents the Referer header from being sent to the new page. ⚠️ Removing the referrer header will affect analytics.

    <a href="www.google.com" target="_blank" rel="noreferrer"> Search </a>
    
Muh-Osman
  • 159
  • 1
  • 5
0
<Link to="route" target="_blank" onClick={(event) => {event.preventDefault(); window.open(this.makeHref("Your_route"));}} />

I Mean

<Link ... target="_blank">

OR

<a target='_blank' href={'Your_url'})}>Your Text</a>
  • i cant use that, because is not just a link on a static text, i have diferent posts with diferent links – Javi Magaldi Sep 22 '20 at 07:52
  • Fine, Then save your dynamic url on a state and use them in the route. for example - {event.preventDefault(); window.open(this.makeHref({This.state.url}));}} /> – Masudul Hasan Shawon Sep 22 '20 at 07:56
0

You can use:

<Link to="route" target="_blank" onClick={(event) => {event.preventDefault(); window.open(this.makeHref("route"));}} />

Please refer to React-Router open Link in new tab

Arfizur Rahman
  • 384
  • 4
  • 13
0

Rather than changing them up front, you can update them on the fly with a click handler.

<div onClick={sendLinksToNewWindow}>

function sendLinksToNewWindow(event) {
    if (!(event.target instanceof HTMLElement))
        return;
    // Use .closest to handle scenario where target isn't the anchor itself. 
    // Ex: `<a href='https://example.com'><span>click here</span></a>`
    const anchor = event.target.closest('a');
    if (anchor !== null) {
        anchor.target = '_blank';
        anchor.rel = 'noopener';
    }
}
-2

In React, you can add the target="_blank" attribute to an anchor () element by using the dangerouslySetInnerHTML attribute, like so:

<a href={url} dangerouslySetInnerHTML={{__html: linkText}} target="_blank" rel="noopener noreferrer" />

or by using JSX and Link from react-router-dom package

import { Link } from 'react-router-dom'

{linkText}

It's important to also include the rel="noopener noreferrer" attribute to prevent a potential security vulnerability.

Alternatively, you can use the onClick event to open the link in a new tab, like so:

<a href={url} onClick={(e) => { e.preventDefault(); window.open(url, '_blank'); }}>{linkText}

This will open the link in a new tab when clicked.

uttam kamar
  • 3,069
  • 2
  • 6
  • 10
amadich
  • 1
  • 2