parent
ac2269b16e
commit
fce748c118
@ -1,36 +1,52 @@ |
|||||||
const LocalMessageDuplexStream = require('./lib/local-message-stream.js') |
const LocalMessageDuplexStream = require('./lib/local-message-stream.js') |
||||||
const PortStream = require('./lib/port-stream.js') |
const PortStream = require('./lib/port-stream.js') |
||||||
const ObjectMultiplex = require('./lib/obj-multiplex') |
const ObjectMultiplex = require('./lib/obj-multiplex') |
||||||
|
const urlUtil = require('url') |
||||||
|
|
||||||
// inject in-page script
|
if (shouldInjectWeb3()) { |
||||||
var scriptTag = document.createElement('script') |
setupInjection() |
||||||
scriptTag.src = chrome.extension.getURL('scripts/inpage.js') |
} |
||||||
scriptTag.onload = function () { this.parentNode.removeChild(this) } |
|
||||||
var container = document.head || document.documentElement |
function setupInjection(){ |
||||||
// append as first child
|
|
||||||
container.insertBefore(scriptTag, container.children[0]) |
// inject in-page script
|
||||||
|
var scriptTag = document.createElement('script') |
||||||
// setup communication to page and plugin
|
scriptTag.src = chrome.extension.getURL('scripts/inpage.js') |
||||||
var pageStream = new LocalMessageDuplexStream({ |
scriptTag.onload = function () { this.parentNode.removeChild(this) } |
||||||
name: 'contentscript', |
var container = document.head || document.documentElement |
||||||
target: 'inpage', |
// append as first child
|
||||||
}) |
container.insertBefore(scriptTag, container.children[0]) |
||||||
pageStream.on('error', console.error.bind(console)) |
|
||||||
var pluginPort = chrome.runtime.connect({name: 'contentscript'}) |
// setup communication to page and plugin
|
||||||
var pluginStream = new PortStream(pluginPort) |
var pageStream = new LocalMessageDuplexStream({ |
||||||
pluginStream.on('error', console.error.bind(console)) |
name: 'contentscript', |
||||||
|
target: 'inpage', |
||||||
// forward communication plugin->inpage
|
}) |
||||||
pageStream.pipe(pluginStream).pipe(pageStream) |
pageStream.on('error', console.error.bind(console)) |
||||||
|
var pluginPort = chrome.runtime.connect({name: 'contentscript'}) |
||||||
// connect contentscript->inpage reload stream
|
var pluginStream = new PortStream(pluginPort) |
||||||
var mx = ObjectMultiplex() |
pluginStream.on('error', console.error.bind(console)) |
||||||
mx.on('error', console.error.bind(console)) |
|
||||||
mx.pipe(pageStream) |
// forward communication plugin->inpage
|
||||||
var reloadStream = mx.createStream('reload') |
pageStream.pipe(pluginStream).pipe(pageStream) |
||||||
reloadStream.on('error', console.error.bind(console)) |
|
||||||
|
// connect contentscript->inpage reload stream
|
||||||
// if we lose connection with the plugin, trigger tab refresh
|
var mx = ObjectMultiplex() |
||||||
pluginStream.on('close', function () { |
mx.on('error', console.error.bind(console)) |
||||||
reloadStream.write({ method: 'reset' }) |
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 |
||||||
|
} |
Loading…
Reference in new issue