diff options
contentscript - skip web3 injection if domain appears to be a pdf
Diffstat (limited to 'app')
-rw-r--r-- | app/scripts/contentscript.js | 80 |
1 files changed, 48 insertions, 32 deletions
diff --git a/app/scripts/contentscript.js b/app/scripts/contentscript.js index ad90059b7..5d31e3c38 100644 --- a/app/scripts/contentscript.js +++ b/app/scripts/contentscript.js @@ -1,36 +1,52 @@ const LocalMessageDuplexStream = require('./lib/local-message-stream.js') const PortStream = require('./lib/port-stream.js') const ObjectMultiplex = require('./lib/obj-multiplex') +const urlUtil = require('url') -// inject in-page script -var scriptTag = document.createElement('script') -scriptTag.src = chrome.extension.getURL('scripts/inpage.js') -scriptTag.onload = function () { this.parentNode.removeChild(this) } -var container = document.head || document.documentElement -// append as first child -container.insertBefore(scriptTag, container.children[0]) - -// setup communication to page and plugin -var pageStream = new LocalMessageDuplexStream({ - name: 'contentscript', - target: 'inpage', -}) -pageStream.on('error', console.error.bind(console)) -var pluginPort = chrome.runtime.connect({name: 'contentscript'}) -var pluginStream = new PortStream(pluginPort) -pluginStream.on('error', console.error.bind(console)) - -// forward communication plugin->inpage -pageStream.pipe(pluginStream).pipe(pageStream) - -// connect contentscript->inpage reload stream -var mx = ObjectMultiplex() -mx.on('error', console.error.bind(console)) -mx.pipe(pageStream) -var reloadStream = mx.createStream('reload') -reloadStream.on('error', console.error.bind(console)) - -// if we lose connection with the plugin, trigger tab refresh -pluginStream.on('close', function () { - reloadStream.write({ method: 'reset' }) -}) +if (shouldInjectWeb3()) { + setupInjection() +} + +function setupInjection(){ + + // inject in-page script + var scriptTag = document.createElement('script') + scriptTag.src = chrome.extension.getURL('scripts/inpage.js') + scriptTag.onload = function () { this.parentNode.removeChild(this) } + var container = document.head || document.documentElement + // append as first child + container.insertBefore(scriptTag, container.children[0]) + + // setup communication to page and plugin + var pageStream = new LocalMessageDuplexStream({ + name: 'contentscript', + target: 'inpage', + }) + pageStream.on('error', console.error.bind(console)) + var pluginPort = chrome.runtime.connect({name: 'contentscript'}) + var pluginStream = new PortStream(pluginPort) + pluginStream.on('error', console.error.bind(console)) + + // forward communication plugin->inpage + pageStream.pipe(pluginStream).pipe(pageStream) + + // connect contentscript->inpage reload stream + var mx = ObjectMultiplex() + mx.on('error', console.error.bind(console)) + mx.pipe(pageStream) + var reloadStream = mx.createStream('reload') + reloadStream.on('error', console.error.bind(console)) + + // if we lose connection with the plugin, trigger tab refresh + pluginStream.on('close', function () { + reloadStream.write({ method: 'reset' }) + }) + +} + +function shouldInjectWeb3(){ + var urlData = urlUtil.parse(window.location.href) + var extension = urlData.pathname.split('.').slice(-1)[0] + var shouldInject = (extension !== 'pdf') + return shouldInject +}
\ No newline at end of file |