Merge pull request #816 from atom/browser-window-preload
Add "preload" option for BrowserWindow
This commit is contained in:
commit
e699cac92c
8 changed files with 41 additions and 3 deletions
|
@ -101,6 +101,13 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
|
|||
// Read icon before window is created.
|
||||
options.Get(switches::kIcon, &icon_);
|
||||
|
||||
// The "preload" option must be absolute path.
|
||||
if (options.Get(switches::kPreloadScript, &preload_script_) &&
|
||||
!preload_script_.IsAbsolute()) {
|
||||
LOG(ERROR) << "Path of \"preload\" script must be absolute.";
|
||||
preload_script_.clear();
|
||||
}
|
||||
|
||||
// Be compatible with old API of "node-integration" option.
|
||||
std::string old_string_token;
|
||||
if (options.Get(switches::kNodeIntegration, &old_string_token) &&
|
||||
|
@ -349,6 +356,10 @@ void NativeWindow::AppendExtraCommandLineSwitches(
|
|||
command_line->AppendSwitchASCII(switches::kNodeIntegration,
|
||||
node_integration_ ? "true" : "false");
|
||||
|
||||
// Append --preload.
|
||||
if (!preload_script_.empty())
|
||||
command_line->AppendSwitchPath(switches::kPreloadScript, preload_script_);
|
||||
|
||||
// Append --zoom-factor.
|
||||
if (zoom_factor_ != 1.0)
|
||||
command_line->AppendSwitchASCII(switches::kZoomFactor,
|
||||
|
|
|
@ -318,6 +318,9 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
|
|||
// Web preferences.
|
||||
mate::PersistentDictionary web_preferences_;
|
||||
|
||||
// The script to load before page's JavaScript starts to run.
|
||||
base::FilePath preload_script_;
|
||||
|
||||
// Page's default zoom factor.
|
||||
double zoom_factor_;
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ const char kEnablePlugins[] = "enable-plugins";
|
|||
const char kGuestInstanceID[] = "guest-instance-id";
|
||||
|
||||
// Script that will be loaded by guest WebContents before other scripts.
|
||||
const char kPreloadScript[] = "preload-script";
|
||||
const char kPreloadScript[] = "preload";
|
||||
|
||||
// Web runtime features.
|
||||
const char kExperimentalFeatures[] = "experimental-features";
|
||||
|
|
|
@ -31,7 +31,7 @@ for arg in process.argv
|
|||
require('web-frame').setName 'ATOM_SHELL_GUEST_WEB_VIEW'
|
||||
else if arg.indexOf('--node-integration=') == 0
|
||||
nodeIntegration = arg.substr arg.indexOf('=') + 1
|
||||
else if arg.indexOf('--preload-script=') == 0
|
||||
else if arg.indexOf('--preload=') == 0
|
||||
preloadScript = arg.substr arg.indexOf('=') + 1
|
||||
|
||||
if location.protocol is 'chrome-devtools:'
|
||||
|
|
|
@ -61,7 +61,11 @@ You can also create a window without chrome by using
|
|||
* `enable-larger-than-screen` Boolean - Enable the window to be resized larger
|
||||
than screen.
|
||||
* `dark-theme` Boolean - Forces using dark theme for the window, only works on
|
||||
some GTK+3 desktop environments.
|
||||
some GTK+3 desktop environments
|
||||
* `preload` String - Specifies a script that will be loaded before other
|
||||
scripts run in the window. This script will always have access to node APIs
|
||||
no matter whether node integration is turned on for the window, and the path
|
||||
of `preload` script has to be absolute path.
|
||||
* `web-preferences` Object - Settings of web page's features
|
||||
* `javascript` Boolean
|
||||
* `web-security` Boolean
|
||||
|
|
|
@ -136,6 +136,16 @@ describe 'browser-window module', ->
|
|||
assert.equal after[0], size.width
|
||||
assert.equal after[1], size.height
|
||||
|
||||
describe '"preload" options', ->
|
||||
it 'loads the script before other scripts in window', (done) ->
|
||||
preload = path.join fixtures, 'module', 'set-global.js'
|
||||
remote.require('ipc').once 'preload', (event, test) ->
|
||||
assert.equal(test, 'preload')
|
||||
done()
|
||||
w.destroy()
|
||||
w = new BrowserWindow(show: false, width: 400, height: 400, preload: preload)
|
||||
w.loadUrl 'file://' + path.join(fixtures, 'api', 'preload.html')
|
||||
|
||||
describe 'beforeunload handler', ->
|
||||
it 'returning true would not prevent close', (done) ->
|
||||
w.on 'closed', ->
|
||||
|
|
9
spec/fixtures/api/preload.html
vendored
Normal file
9
spec/fixtures/api/preload.html
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
<html>
|
||||
<body>
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
if (!window.test)
|
||||
window.test = 'window'
|
||||
require('ipc').send('preload', window.test);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
1
spec/fixtures/module/set-global.js
vendored
Normal file
1
spec/fixtures/module/set-global.js
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
window.test = 'preload';
|
Loading…
Add table
Reference in a new issue