
Research
Supply Chain Attack on Axios Pulls Malicious Dependency from npm
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.
@chainplatform/react-native-htmlview
Advanced tools
React Native render HTML view, support React Native Web. This project fork from https://github.com/jsdf/react-native-htmlview
npm install @chainplatform/react-native-htmlview --save
or
yarn add @chainplatform/react-native-htmlview
props:
imageWidth: Image render size, height will auto calculator from original sizevalue: a string of HTML content to renderonLinkPress: a function which will be called with a url when a link is pressed.
Passing this prop will override how links are handled (defaults to calling Linking.openURL(url))onLinkLongPress: a function which will be called with a url when a link is long pressed.
The default is null.stylesheet: a stylesheet object keyed by tag name, which will override the
styles applied to those respective tags.renderNode: a custom function to render HTML nodes however you see fit. If
the function returns undefined (not null), the default renderer will be
used for that node. The function takes the following arguments:
node the html node as parsed by htmlparser2index position of the node in parent node's childrensiblings parent node's children (including current node)parent parent nodedefaultRenderer the default rendering implementation, so you can use the normal rendering logic for some subtree. defaultRenderer takes the following arguments:
node the node to render with the default rendering logicparent the parent of node of nodebullet: text which is rendered before every li inside a ulparagraphBreak: text which appears after every p elementlineBreak: text which appears after text elements which create a new line (br, headings)addLineBreaks: when explicitly false, effectively sets paragraphBreak and lineBreak to nullNodeComponent, nodeComponentProps, RootComponent, rootComponentProps, TextComponent, textComponentProps: see Customizing things even further below.import React from 'react';
import {StyleSheet} from 'react-native';
import HTMLView from '@chainplatform/react-native-htmlview';
class App extends React.Component {
render() {
const htmlContent = `<p><a href="http://google.com">♥ nice job!</a></p>`;
return (
<HTMLView
imageWidth={375}
value={htmlContent}
stylesheet={styles}
/>
);
}
}
const styles = StyleSheet.create({
a: {
fontWeight: '300',
color: '#FF3366', // make links coloured pink
},
});
When a link is clicked, by default ReactNative.Linking.openURL is called with the
link url. You can customise what happens when a link is clicked with onLinkPress:
class App extends React.Component {
render() {
return (
<HTMLView
value={this.props.html}
imageWidth={375}
onLinkPress={(url) => console.log('clicked link: ', url)}
/>
);
}
}
If you're getting the error "undefined is not an object (evaluating 'RCTLinkingManager.openURL’)” from the LinkingIOS API, try adding ‘RCTLinking' to the project's 'Linked Frameworks and Libraries’. You might have to find RCTLinking.xcodeproj in the react-native package dir and drag that into your main Xcode project first.
You can implement the renderNode prop to add support for unsupported element
types, or override the rendering for supported types. renderNode is a function which is called with the type and attributes of each HTML element found in the input HTML, and from this function you can return a React element to be rendered in its place. If you return null nothing will be rendered in place of this element or its children. If you return undefined (or don't return anything) then HTMLView will drop back to its default rendering for that type of HTML element.
For example, here is how you might implement the <iframe> element:
function renderNode(node, index, siblings, parent, defaultRenderer) {
if (node.name == 'iframe') {
const a = node.attribs;
const iframeHtml = `<iframe src="${a.src}"></iframe>`;
return (
<View key={index} style={{width: Number(a.width), height: Number(a.height)}}>
<WebView source={{html: iframeHtml}} />
</View>
);
}
}
const htmlContent = `
<div>
<iframe src="http://info.cern.ch/" width="360" height="300" />
</div>
`;
class App extends React.Component {
render() {
return (
<HTMLView
imageWidth={375}
value={htmlContent}
renderNode={renderNode} />
);
}
}
Alternatively, this example shows how you could disallow the <iframe> element:
function renderNode(node, index, siblings, parent, defaultRenderer) {
if (node.name == 'iframe') {
return null;
}
}
const htmlContent = `
<div>
<iframe src="http://info.cern.ch/" width="360" height="300" />
</div>
`;
class App extends React.Component {
render() {
return (
<HTMLView
value={htmlContent}
imageWidth={375}
renderNode={renderNode} />
);
}
}
If you want to reuse the default renderer, you need to call it passing an array of nodes. This example shows how to replace a specific HTML tag with something different, but still process the children.
function renderNode(node, index, siblings, parent, defaultRenderer) {
if (node.name == 'mytag') {
const specialSyle = node.attribs.style
return (
<Text key={index} style={specialSyle}>
{defaultRenderer(node.children, parent)}
</Text>
)
}
}
const htmlContent = `
<div>
<mytag>
<div>some content processed normally by the engine</div>
</mytag>
</div>
`;
class App extends React.Component {
render() {
return (
<HTMLView
value={htmlContent}
imageWidth={375}
renderNode={renderNode} />
);
}
}
For further understanding of the possiblities of the renderNode prop, read through htmlToElement.js. Particularly look at where renderNode is called to see how it can override what sort of React element is created in place of an element in the input HTML.
In addition to supplying a custom renderNode function, you can customize what is rendered by the built in renderNode function. Read through htmlToElement.js and note the usage of NodeComponent (for rendering HTML element nodes) and TextComponent (for rendering text strings in the HTML). Both of these components can be injected as the NodeComponent and TextComponent props to HTMLView, or alternatively they can be given extra props by passing an object as the nodeComponentProps and textComponentProps props. Finally you can also use the props RootComponent and rootComponentProps to customize the root wrapper View element that is rendered by the HTMLView in HTMLView.js.
See CHANGELOG.md.
FAQs
React Native render HTML view, support React Native Web. This project fork from https://github.com/jsdf/react-native-htmlview
We found that @chainplatform/react-native-htmlview demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.

Security News
TeamPCP is partnering with ransomware group Vect to turn open source supply chain attacks on tools like Trivy and LiteLLM into large-scale ransomware operations.