mirror of
https://github.com/status-im/react-native.git
synced 2025-02-04 05:34:15 +00:00
634e7e11e3
Summary: To prevent people from linking file:// or other URLs inside RN WebViews, default <WebView> to not allowing those types of URLs. This adds the originWhitelist to specify other schemes or domains to be allowed. If the url is not allowed, it will be opened in Safari/by the OS instead. Reviewed By: yungsters Differential Revision: D7833203 fbshipit-source-id: 6881acd3b434d17910240e4edd585c0a10b5df8c
60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
*/
|
|
'use strict';
|
|
|
|
var React = require('react');
|
|
var ReactNative = require('react-native');
|
|
var {
|
|
WebView,
|
|
} = ReactNative;
|
|
|
|
var { TestModule } = ReactNative.NativeModules;
|
|
|
|
class WebViewTest extends React.Component {
|
|
|
|
render() {
|
|
var firstMessageReceived = false;
|
|
var secondMessageReceived = false;
|
|
function processMessage(e) {
|
|
var message = e.nativeEvent.data;
|
|
if (message === 'First') {firstMessageReceived = true;}
|
|
if (message === 'Second') {secondMessageReceived = true;}
|
|
|
|
// got both messages
|
|
if (firstMessageReceived && secondMessageReceived) {TestModule.markTestPassed(true);}
|
|
// wait for next message
|
|
else if (firstMessageReceived && !secondMessageReceived) {return;}
|
|
// first message got lost
|
|
else if (!firstMessageReceived && secondMessageReceived) {throw new Error('First message got lost');}
|
|
}
|
|
var html = 'Hello world'
|
|
+ '<script>'
|
|
+ "window.setTimeout(function(){window.postMessage('First'); window.postMessage('Second')}, 0)"
|
|
+ '</script>';
|
|
|
|
// fail if messages didn't get through;
|
|
window.setTimeout(function() { throw new Error(firstMessageReceived ? 'Both messages got lost' : 'Second message got lost');}, 10000);
|
|
|
|
var source = {
|
|
html: html,
|
|
};
|
|
|
|
return (
|
|
<WebView
|
|
source={source}
|
|
onMessage = {processMessage}
|
|
originWhitelist={['about:blank']}
|
|
/>
|
|
);
|
|
}
|
|
}
|
|
|
|
WebViewTest.displayName = 'WebViewTest';
|
|
|
|
module.exports = WebViewTest;
|