metamask-iframe-stream,没成功
https://github.com/kumavis/iframe-stream/blob/master/test/rebundle.js
iframe-stream-其实就是将iframe打包成流
Create a stream around an iframe via post-message-stream
- const IframeStream = require('iframe-stream').IframeStream
- var iframe = createIframe()
- var iframeStream = IframeStream(iframe)
Note
- Setup the stream immediately, so we don't miss the iframe's
load
event. - The IframeStream will buffer all input until the childstream is ready.
- This is an object stream, and buffers will not be handled gracefully.
Example
Here is an example using dnode to create a callback based API with a javascript context inside an iframe.
Parent:
- const IframeStream = require('iframe-stream').IframeStream
- const Dnode = require('dnode')
- var iframe = createIframe()
- var iframeStream = IframeStream(iframe)
- var dnode = Dnode()
- dnode.on('remote', function(child){
- child.doAsyncSomething(function(){
- console.log('child finished doing the thing!')
- })
- })
- dnode.pipe(iframeStream).pipe(dnode)
Child:
- const ParentStream = require('iframe-stream').ParentStream
- const Dnode = require('dnode')
- var parentStream = ParentStream(iframe)
- var dnode = Dnode({
- doAsyncSomething: function (cb) {
- console.log('doing something async...')
- cb()
- }
- })
- dnode.pipe(parentStream).pipe(dnode)
- var PostMessageStream = require('post-message-stream')
- /*
- IframeStream starts corked until it gets a message from the iframe
- ParentStream starts uncorked
- */
- module.exports = {
- IframeStream: IframeStream,
- ParentStream: ParentStream,
- }
- function IframeStream(iframe) {
- if (this instanceof IframeStream) throw Error('IframeStream - Dont construct via the "new" keyword.')
- return new PostMessageStream({
- name: 'iframe-parent',
- target: 'iframe-child',
- targetWindow: iframe.contentWindow,
- })
- }
- //
- // Parent Stream
- //
- function ParentStream() {
- if (this instanceof ParentStream) throw Error('ParentStream - Dont construct via the "new" keyword.')
- return new PostMessageStream({
- name: 'iframe-child',
- target: 'iframe-parent',
- targetWindow: frames.parent,
- })
- }
- npm install iframe --save
- npm install iframe-stream --save
- npm install dnode --save
- const test = require('tape')
- const Iframe = require('iframe')
- const from = require('from')
- const pipe = require('mississippi').pipe
- const IframeStream = require('../').IframeStream
- const rebundle = require('./rebundle')
- const htmlWrap = require('./htmlWrap')
- const iframeContent = htmlWrap(rebundle(require('./frame')))
- // setup iframe
- var iframe = Iframe({
- body: iframeContent,
- container: document.body,
- }).iframe
- var iframeStream = IframeStream(iframe)
- test(function(t) {
- var data = [, , , , , , , , ]
- t.plan(data.length)
- pipe(
- from(data),
- iframeStream
- )
- // create a test for each datum
- // this is because these streams never close
- eachOutput(iframeStream, data.map(function(datum){
- return function onResult(result){ t.equal(result, datum * , 'datum was doubled correctly') }
- }), function onDone(){
- t.end()
- })
- })
- function eachOutput(stream, handlers, cb) {
- var index =
- if (!handlers.length) return cb()
- stream.once('data', handleChunk)
- function handleChunk(data){
- var fn = handlers[index]
- fn(data)
- index++
- if (!handlers[index]) return cb()
- stream.once('data', handleChunk)
- }
- }
htmlWrap.js
- module.exports = htmlWrap
- function htmlWrap(src){
- return '<'+'script type="text/javascript"'+'>'+src+'<'+'/script'+'>'
- }
rebundle.js
- //
- // Extraced from WebWorkify
- // https://github.com/substack/webworkify/blob/master/index.js
- //
- var bundleFn = arguments[];
- var sources = arguments[];
- var cache = arguments[];
- var stringify = JSON.stringify;
- module.exports = function (fn, options) {
- var wkey;
- var cacheKeys = Object.keys(cache);
- for (var i = , l = cacheKeys.length; i < l; i++) {
- var key = cacheKeys[i];
- var exp = cache[key].exports;
- // Using babel as a transpiler to use esmodule, the export will always
- // be an object with the default export as a property of it. To ensure
- // the existing api and babel esmodule exports are both supported we
- // check for both
- if (exp === fn || exp && exp.default === fn) {
- wkey = key;
- break;
- }
- }
- if (!wkey) {
- wkey = Math.floor(Math.pow(, ) * Math.random()).toString();
- var wcache = {};
- for (var i = , l = cacheKeys.length; i < l; i++) {
- var key = cacheKeys[i];
- wcache[key] = key;
- }
- sources[wkey] = [
- Function(['require','module','exports'], '(' + fn + ')(self)'),
- wcache
- ];
- }
- var skey = Math.floor(Math.pow(, ) * Math.random()).toString();
- var scache = {}; scache[wkey] = wkey;
- sources[skey] = [
- Function(['require'], (
- // try to call default if defined to also support babel esmodule
- // exports
- 'var f = require(' + stringify(wkey) + ');' +
- '(f.default ? f.default : f)(self);'
- )),
- scache
- ];
- var workerSources = {};
- resolveSources(skey);
- function resolveSources(key) {
- workerSources[key] = true;
- for (var depPath in sources[key][]) {
- var depKey = sources[key][][depPath];
- if (!workerSources[depKey]) {
- resolveSources(depKey);
- }
- }
- }
- var src = '(' + bundleFn + ')({'
- + Object.keys(workerSources).map(function (key) {
- return stringify(key) + ':['
- + sources[key][]
- + ',' + stringify(sources[key][]) + ']'
- ;
- }).join(',')
- + '},{},[' + stringify(skey) + '])'
- ;
- return src
- }
frame.js
- const BrowserStdout = require('browser-stdout')
- const ParentStream = require('../index.js').ParentStream
- const transform = require('mississippi').through
- const pipe = require('mississippi').pipe
- module.exports = setupStream
- setupStream()
- function setupStream(opts) {
- var iframeStream = ParentStream()
- pipe(
- iframeStream,
- transform({ objectMode: true }, doubleIt),
- iframeStream
- )
- }
- function doubleIt(chunk, encoding, cb){
- cb(null, chunk * )
- }
上面的例子是iframe-stream作者写的一个测试test
metamask-iframe-stream,没成功的更多相关文章
- LODOP判断没成功发送任务-重打一下
一般情况下打印执行了PRINT()或PRINTA(),就会加入打印机队列,如果打印机脱机,就会在队列里排队,当打印机连上并取消脱机的时候,正在排队的任务就会打出,所以一般建议用是否加入队列来判断打印成 ...
- 宝塔https部署没成功的原因排查
今天ytkah在迁移一个客户网站的时候出了点问题,网站从旧的服务器(windows)换到新的服务器(阿里云centos 7,已经安装了宝塔面板),网站之前有用comodo的ssl证书,因为快要过期了, ...
- Running a Remote Desktop on a Windows Azure Linux VM (远程桌面到Windows Azure Linux )-摘自网络(试了,没成功 - -!)
A complete click-by-click, step-by-step video of this article is available ...
- [archlinux][plasma][screensaver] plasma5配置屏保程序,没成功(-_-#)
plamsa用了好久,一直没有屏保.我想要玄酷的屏保! 用xscreensaver, 之前用FVWM2的时候,就用过了,很玄酷. 一,安装 pacman -S xscreensaver 二,配置 xs ...
- Ubuntu 16.04安装Mac OS 12虚拟机资源(没成功,但资源还是可以用)
整理的Mac OS 12虚拟机资源.装虚拟机基本是按这样的套路: 1.先装VM 2.破解VM使其支持Mac OS 12,这个脚本基本是全平台支持,可以看里面的教程文档. 3.用镜像安装系统. 资源: ...
- MetaMask/zero-client
https://github.com/MetaMask/zero-client MetaMask ZeroClient and backing iframe service architecture ...
- iframe高度自动随着子页面的高度变化而变化(不止要在iframe标签里加上this.height=this.contentWindow.document.body.scrollHeight)
最近使用iframe整合页面遇到一些难题,走了很多弯路才解决,借此记录一下: 1 <!-- 页面主体内容 --> 2 <div class="iframe-wrapper& ...
- 原生XMLHTTPResponse,jQuery-Ajax 上传文件;iframe上传图片&预览;图片验证码小案例
原生AJAX Ajax主要就是使用 [XmlHttpRequest]对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件) 1.Xml ...
- iframe编程的一些问题
前几天做一个用iframe显示曲线图的demo,发现对iframe的contentDocument绑定 onclick事件都无效,而在页面中对iframe.contentDocument的onclic ...
随机推荐
- NavicatForOracle无法连接数据库,报错ORA-28547
因为换了新项目,要用到oracle数据库,但是用Navicat连接oracle不像连接MySql那样简单,连接的时候总是报ORA-28547,最后搜了一下解决方案发现是install client没有 ...
- ORACLE查看数据库已安装补丁
cd $ORACLE_HOME ./opatch lsinventory :}
- DOM相关
归纳一下, 不管是DOM Core还是HTML-DOM,我们在使用JavaScript的时候要注意浏览器之间的兼容性,因为不同的浏览器对这两类方法和属性的支持可能不一样,一般推荐使用DOM Core方 ...
- Linux常用基本命令( rmdir, rm, mv )
1,rmdir,一个很鸡肋的命令,只能删除空目录 ghostwu@dev:~/linux/cp$ ls .txt .txt a a2 a3 ghostwu@dev:~/linux/cp$ rmdir ...
- php解释命令行的参数
php cli模式下,可以用$argc, $argv来读取所有的参数以及个数,如: ghostwu@ghostwu:~/php/php1/1$ cat go1 #!/usr/bin/php <? ...
- 5月7日——采用第三方页面内容,但是顶部title使用自己的
---------> 由A页面进入我的页面 代码如下: (1)A页面下需要添加的代码 (2)我的页面下需要添加的代码 此处用到的语法为mui框架中的语法,可参照mui官方 ...
- forever 启动nodejs
forever可以看做是一个nodejs的守护进程,能够启动,停止,重启我们的app应用. 1.全局安装 forever // 记得加-g,forever要求安装到全局环境下 sudo npm ins ...
- vue 实现点击图片放大
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.建立子组件,来实现图片方法功能: BigImg.vue <template> <!-- 过渡 ...
- influxdb-1.7.2.x86_64安装 install influxdb-1.7.2.x86_64 on RedHat & CentOS
1.下载安装 wget http://dl.influxdata.com/influxdb/releases/influxdb-1.7.2.x86_64.rpm https://portal.infl ...
- MyBatis与JDBC连接数据库所使用的url之间的差异
在Windows7 系统上安装了MySQL 8.0,然后创建Maven工程,配置pom.xml文件,添加了如下依赖: <dependency> <groupId>org.myb ...