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 |
|
||||||
// append as first child
|
|
||||||
container.insertBefore(scriptTag, container.children[0]) |
|
||||||
|
|
||||||
// setup communication to page and plugin
|
function setupInjection(){ |
||||||
var pageStream = new LocalMessageDuplexStream({ |
|
||||||
|
// 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', |
name: 'contentscript', |
||||||
target: 'inpage', |
target: 'inpage', |
||||||
}) |
}) |
||||||
pageStream.on('error', console.error.bind(console)) |
pageStream.on('error', console.error.bind(console)) |
||||||
var pluginPort = chrome.runtime.connect({name: 'contentscript'}) |
var pluginPort = chrome.runtime.connect({name: 'contentscript'}) |
||||||
var pluginStream = new PortStream(pluginPort) |
var pluginStream = new PortStream(pluginPort) |
||||||
pluginStream.on('error', console.error.bind(console)) |
pluginStream.on('error', console.error.bind(console)) |
||||||
|
|
||||||
// forward communication plugin->inpage
|
// forward communication plugin->inpage
|
||||||
pageStream.pipe(pluginStream).pipe(pageStream) |
pageStream.pipe(pluginStream).pipe(pageStream) |
||||||
|
|
||||||
// connect contentscript->inpage reload stream
|
// connect contentscript->inpage reload stream
|
||||||
var mx = ObjectMultiplex() |
var mx = ObjectMultiplex() |
||||||
mx.on('error', console.error.bind(console)) |
mx.on('error', console.error.bind(console)) |
||||||
mx.pipe(pageStream) |
mx.pipe(pageStream) |
||||||
var reloadStream = mx.createStream('reload') |
var reloadStream = mx.createStream('reload') |
||||||
reloadStream.on('error', console.error.bind(console)) |
reloadStream.on('error', console.error.bind(console)) |
||||||
|
|
||||||
// if we lose connection with the plugin, trigger tab refresh
|
// if we lose connection with the plugin, trigger tab refresh
|
||||||
pluginStream.on('close', function () { |
pluginStream.on('close', function () { |
||||||
reloadStream.write({ method: 'reset' }) |
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