UIView的分类,使用IBInspectable+ IB_DESIGNABLE关键字: #import IB_DESIGNABLE @interface UIView (Inspectable...borderWidth; @property(nonatomic,assign) IBInspectable UIColor *borderColor; @end #import "UIView+Inspectable.h..." @implementation UIView (Inspectable) -(void)setCornerRadius:(CGFloat)cornerRadius{ self.layer.masksToBounds...直接使用的话只有在运行时才能看到效果, 例如要实时显示一个UIBUtton圆角、描边效果,需要创建一个类继承UIButton #import #import "UIView+Inspectable.h
像BrowserWindow一样,webview也拥有与之关联的webContents对象 本质上,webContents是个EventEmitter,用来连通页面与外部环境: webContents...三.webContents与webview的关系 从API列表上来看,似乎webContents身上的大多数接口,在webview身上也有,那么二者是什么关系?...Chromium-conceptual-application-layers 中间有一层叫webContents: WebContents: A reusable component that is the...webContents) { webContents = webview.getWebContents(); webContents.on('dom-ready', e => {...as devtools P.S.当然,Electron的webContents与Chromium的webContents确实有紧密联系,但二者从概念上和实现上都是完全不同的,Chromium的webContents
https://www.cnblogs.com/liulun/p/15217180.html Electron团队把remote模块拿掉之后,开发者就只能使用ipcRenderer,ipcMain,webContents...broadcast) return webContents.getAllWebContents().forEach((wc) => { if (wc.id !...这里我们通过e.sender.id来判断消息是从哪个渲染进程发来的,当转发这个消息给其他webContents时,要排除掉那个发来消息的webContents。...emitToWebContents(wcIdOrWc: number | WebContents, eventName: string, eventArgs?...对象,如果当前进程是主进程,则找到WebContents对象,并调用它的send方法发送消息;如果当前进程是渲染进程,则使用ipcRenderer的sendTo方法发送给目标WebContents对象。
## 参考Mark the webview as inspectable in iOS 16.4
const remote = require("@electron/remote/main") remote.initialize() //... remote.enable(mainWindow.webContents...index.html") mainWindow.on("closed",()=>{ mainWindow = null }) remote.enable(mainWindow.webContents...() rtmpWindow.webContents.on('did-finish-load', () => { //下面的这行代码要在上面的BrowserWindow加载完成之后调用 rtmpWindow.webContents.send...win1.id, win2Id : win2.id } // 主进程获取 global.winIds["win1Id"]; 第二种是: 主进程创建事件,发送信息(不推荐) // 主进程中 win1.webContents.send...('distributeIds',{ win2Id : win2.id }); win2.webContents.send('distributeIds',{ win1Id : win1
webContents 返回窗口的 WebContents 对象,它提供了对窗口中加载的网页内容的控制和交互。 close() 关闭窗口。 destroy() 销毁窗口及其关联的资源。...webContents 属性 当我们在 Electron 中创建一个窗口时,窗口中的网页内容由 WebContents 对象表示。...每个 BrowserWindow 实例都关联一个 WebContents 实例,它充当了与窗口中加载的网页进行交互的接口。...用大白话来说就是:BrowserWindow 实例操作的是窗口,WebContents操作的是窗口内渲染的网页内容。...isDestroyed() 检查 WebContents 对象是否已被销毁。 clearHistory() 清除窗口中网页的导航历史记录。 其它更多方法,请参看文档。
= event.sender const win = BrowserWindow.fromWebContents(webContents) win.setTitle(title...ipcMain.on('set-title', (event, title) => { const webContents = event.sender const win...= BrowserWindow.fromWebContents(webContents) win.setTitle(title) }) 每当消息通过set-title通道传入时...消息需要通过主进程的WebContents实例发送到渲染进程。这个WebContents实例包含一个sent方法,可以像ipcReender .send那样使用它。...mainWindow.webContents.openDevTools() } app.whenReady().then(() => { ipcMain.on('counter-value', (
catch() }, } } 问题解决 点击a链接会打开一个新窗口 解决打开qq授权页面点击页面中的链接会又打开一个窗口的问题 使用webContents...loginWindow.webContents.on('new-window', (event, url) => { event.preventDefault(); shell.openExternal...(url); }); 授权后是否成功很难去判断 到这个问题后我就想到一个词 那就是 Response 和 code 然后就去搜索了嘛 结果在 webContents找到了!...但是我们不能直接使用他 要在点击授权之后再去使用他 loginWindow.webContents.on('will-navigate', (e, url,) => { content.on...当使用 api(如 webContents.loadURL 和 webContents.back) 以编程方式来启动导航的时候,这个事件将不会发出.
上面说了渲染进程如何向主进程发送消息,但主进程也可以主动向渲染进程发送消息 在主进程中,我们会创建一个 BrowserWindow 对象,这个对象有 webContents 属性。...当然 webContents 对象远不止这两个通信方法,具体可以看 webContents 下面是官方文档提供的使用 webContents 实现通信的例子: // In the main process...('did-finish-load', () => { win.webContents.send('ping', 'whoooooooh!')...}) 注意,webContents.on 监听的是已经定义好的事件,如上面的 did-finish-load。...因此,event.sender 发送的消息在主进程中还是需要通过 ipcMain.on 方法来监听,而不是通过 webContents.on 方法。 2.
此 WebContents 实例包含一个 send方法,其使用方式与 ipcRenderer.send 相同。...1、在主线程中通过 mainWindow.webContents.send 发送事件 // 发送主进程的错误信息给渲染进程 mainWindow.webContents.send(IPC_EVENT.EVENT_PROCESS_ERROR...检测到有可用的更新 autoUpdater.on(IPC_EVENT.EVENT_UPDATE_UPDATEAVAILABLE, (info: UpdateInfo) => { win.webContents.send...autoUpdater.on(IPC_EVENT.EVENT_UPDATE_DOWNLOADPROGRESS, (progressObj: ProgressInfo) => { win.webContents.send...autoUpdater.on(IPC_EVENT.EVENT_UPDATE_UPDATEDOWNLOADED, () => { autoUpdater.quitAndInstall(); win.webContents.send
主进程窗口加载完页面后,增加如下代码:mainWindow.webContents.on('did-finish-load', function(event){ mainWindow.webContents.send...console.warn('app:gpu-process-crashed', event, kill);});app.on('renderer-process-crashed', (event, webContents..., kill) => { console.warn('app:renderer-process-crashed', event, webContents, kill);});app.on('render-process-gone...', (event, webContents, details) => { console.warn('app:render-process-gone', event, webContents, details...child-process-gone', (event, details) => { console.warn('app:child-process-gone', event, details);});注意:event 和 webContents
窗口间通信的问题 electron窗口通信比nwjs要麻烦的多 electron分主进程和渲染进程,渲染进程又分主窗口的渲染进程和子窗口的渲染进程 主窗口的渲染进程给子窗口的渲染进程发消息 subWin.webContents.on...('dom-ready', () => { subWin.webContents.send('message', { title: self....BrowserWindow,ipcMain } from 'electron' ipcMain.on('articleRefreshMain', (event, message) => { mainWindow.webContents.send...WriteIndex-titleInput")[0].children[0].focus(); clipboard.writeText(this.title); win.webContents.paste...public-DraftEditor-content")[0].click(); clipboard.writeHTML(this.doc.body.innerHTML); win.webContents.paste
在Electron里,当我们创建一个基础窗口对象,就能够通过它的引用拿到WebContents。...而每个webcontents都有一个mainFrame,就是窗口直接加载的主体对象。...但它和ipcRenderer.sendTo的最大区别在于,后者是基于WebContents的,所以只有具备webContents的对象才能使用,但messagePort是web标准,还适用于webWorker...在Electron里,iframe没有webContents,而是以宿主页面contents下面的一个frame的形式存在。1....webview的webContents对象可以直接通过事件event的sender属性获取,无需通过宿主的win对象来获得。
* 增加const utf8* wkeGetUserAgent(wkeWebView webView);接口 * 跟进百度百科选中图片会白屏的问题 * 修复electron模式的WebContents.prototype.loadFile...问题,以及增加了WebContents的几个api * 增加electron的loadFile
主进程TO渲染进程 渲染进程是由主进程控制的,通过创建的渲染进程的窗口win.webContents对象,可以轻易地访问渲染进程相关内容。 这里官网的相关事例说明相对完善,可以自行查看。...('ready-open-url') }) 方法2: ipcMain.on 接收消息通知时,event.sender 为渲染进程的webContents 对象事例,我们也可以直接进行消息通知: const...每个窗口 webContents.getProcessId() 或者 webContents.id 即可获得对应窗口的id。...伪代码如下: // win1窗口发送消息 ipcRenderer.sendTo(win2.webContents.id, 'send-msg', params1, params2) // win2...// 监听右键菜单触发 win.webContents.on('context-menu', (event, params) => { const selectEnabled = !!
webContents 渲染以及控制 web 页面。 Renderer Process 模块 desktopCapturer 从桌面上捕获音频和视频的媒体源信息。...() rtmpWindow.webContents.on('did-finish-load', () => { //下面的这行代码要在上面的BrowserWindow加载完成之后调用 rtmpWindow.webContents.send...'ping', 'someThing') 利用 remote 接口直接获取渲染进程发送消息 // 渲染进程 // 获取窗口的id remote.BrowserWindow.fromId(winId).webContents.send.../ 渲染进程获取 require('electron').remote.getGlobal('winIds').win1Id 第二种是: 主进程创建事件,发送信息(不推荐) // 主进程中 win1.webContents.send...('distributeIds',{ win2Id : win2.id }); win2.webContents.send('distributeIds',{ win1Id : win1
所以我们就要在主进程中做如下操作 最外层 BrowserWindow 的 webContents 上监听 did-attach-webview 事件,获取新挂上去的 的 webContents...。 使用获取到的 webContents 监听 will-navigate事件。...这时候,我们就可以在 will-navigate 事件中使用 e.preventDefault() 阻止 导航至其他网页了 代码如下: mainWindow.webContents.on...//mainWindow.webContents.openDevTools() addListener(mainWindow); } const ipcMain = require('electron...(); } } win.webContents.on('will-navigate', will_navigate); } 渲染进程 <webview src="http://10.88.8.90
会显示所有设备清单: iOS Devices: localhost:9222 - iPad 点击打开 可以发现地址栏变为: 同时显示该ios设备中Safari浏览器打开的所有页面,和一个提示: Inspectable
技术架构: Electron+Nodejs 1 实现思路: 1.1 监听webview事件,注入js代码 利用electron的webContents,监听需要获取图片的网页,当网页加载完成,促发‘dom-ready...主要用了这个api: webContents.executeJavaScript(code[,userGesture,callback]) 如: win.webContents.on('dom-ready...', () => { win.webContents.executeJavaScript(code[,userGesture,callback]) }); 1.2 遍历HTML中的图片URL 这里要注意...1.3 返回获取的结果 electron往webview中注入的代码可以通过return返回, 也可以通过在注入代码中写入: electron.remote.getGlobal(‘webWin').webContents.send
领取专属 10元无门槛券
手把手带您无忧上云