2026-02-13
2
折腾家里的ALLINONE小主机,现在想实现常用设备不连接我的服务器内网,因为会导致我折腾小主机时其他手机\智能家具设备断网,想让手机等一般上网设备与服务器网络分离开来,但又需要支持互相访问(NAS以及手机管理服务器).首先介绍一下网络,小主机安装了RouterOS作为服务器网络的路由192.168.4.0/24,ROS的WAN口交给CPE用于互联网访问,CPE流量不够但稳定,用于服务器轻度使用(没有长期占用网络的服务),因此用另一条网络用于日常上网192.168.123.0/24,现在想打通两个网络,让他们变得不那么完全分开,及可以在服务器管理到到日常上网的路由器,也可以用手机管理服务器.开始是将小主机分配一个网口给ESXI的win7虚拟机,这样win7就有双网卡(4网段和123网段),然后将win7设置为网关,在123路由器设置静态路由,路由4网段的数据到win7上,最后发现走不通(使用的是配置开启系统的路由转发功能,注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter方式),搞到晚上两点由于要上班只有先搁置,夜里睡不着想着为什么不用OpenWrt充当这个角色,于是花半天时间折腾Openwrt成功.网络拓扑主网络(4网段): 192.168.4.0/24,网关 192.168.4.1, (网关连接外网192.168.8.1,与配置无关)内网段(123网段): 192.168.123.0/24,网关 192.168.123.14网段由ESXI中的软路由管理,所有4网段的机器都是虚拟机,123网段是硬路由OpenWrt 双网卡:eth0: 192.168.4.250(连接4网段)eth1: 192.168.123.250(连接123网段)1.首先安装OpenWrt,备忘一下,由于OpenWrt都是img镜像,想要在虚拟平台安装,必须使用转换工具将Img文件转换成虚拟磁盘,ESXI对应就是vmdk,或者使用网友将img封装到pe的iso镜像,通过iso虚拟光驱启动pe,在pe中将img写入硬盘方式,安装OpenWrt.我使用的是OpenWrt-19.08.iso,目录树如下,佩服人类的智慧F:\tree /F卷 WePE64 的文件夹 PATH 列表卷序列号为 3F0D-F757F:.│ BOOTMGR│ IMG写盘工具.exe│ openwrt-19.07.8-x86-64-combined-squashfs.img│├─EFI│ ├─BOOT│ │ bootx64.efi│ ││ └─MICROSOFT│ └─BOOT│ BCD│└─WEPE B64 WEPE.SDI WePE64.WIM2.配置OpenWrt安装完成后在控制台修改eth0为的ip为固定192.168.4.250,不需要设置网关,除非你想在这个上面运行其他服务,我这里让他作为纯路由转发,进入luci操作剩余步骤删除默认创建的wan和wan6口,绑定为eth1,新建名为LAN2的接口,设置固定ip192.168.123.250,不需要设置网关编辑LAN口,取消桥接,禁用dhcp服务器3.配置4网段,123网段的路由器,设置静态路由由于需要123网段能访问4网段,4网段又需要访问123网段,因此他们都需要配置静态路由,当访问对应网段的数据时都去找当前网段内的192.168.x.250(x是4或者123)具体就是4网段:目标网络192.168.123.0/24,网关192.168.4.250123网段:目标网络192.168.4.0/24,网关192.168.123.250,4.接下来是新知识点,你会发现在设置完两边路由的静态路由后,两个网络的设备可以互相访问对方的路由,也就是192.168.4.x可以访问到192.168.123.1路由器管理页面192.168.123.x可以访问到192.168.4.1路由器管理页面对方网络的其他设备的ip可以ping通,但像web服务等却无法使用,路由追踪如下:[root@localhost ~]# traceroute 192.168.123.1traceroute to 192.168.123.1 (192.168.123.1), 30 hops max, 60 byte packets 1 gateway (192.168.4.1) 0.484 ms 0.408 ms 0.345 ms 2 192.168.4.250 (192.168.4.250) 0.865 ms 0.831 ms 0.787 ms 3 192.168.123.1 (192.168.123.1) 1.216 ms 1.372 ms 1.304 ms[RT-AC54U /home/root]# traceroute 192.168.4.200traceroute to 192.168.4.200 (192.168.4.200), 30 hops max, 38 byte packets 1 192.168.123.250 (192.168.123.250) 0.359 ms 0.193 ms 0.312 ms 2 192.168.4.200 (192.168.4.200) 0.705 ms !C 0.581 ms !C 0.501 ms !C[RT-AC54U /home/root]# traceroute 192.168.4.201traceroute to 192.168.4.201 (192.168.4.201), 30 hops max, 38 byte packets 1 192.168.123.250 (192.168.123.250) 0.249 ms 0.449 ms 0.626 ms 2 192.168.4.201 (192.168.4.201) 0.585 ms * 0.685 ms[RT-AC54U /home/root]# curl http://192.168.4.201curl: (56) Recv failure: Connection reset by peer可以看到到路由器,数据包能正常过去,而到其他主机则会被拒绝(traceroute 显示包能到达 192.168.4.200,但返回了 !C(Communication Administratively Prohibited),下面是求助ai过程好的,让我给你总结一下根本原因:核心问题:非对称路由 + 严格的防火墙状态检查数据包的实际路径从 123 网段访问 4.1(路由器):去程:123.x → 123.250(OpenWrt)→ 4.250(OpenWrt)→ 4.1回程:4.1 → 4.250(OpenWrt)→ 123.250(OpenWrt)→ 123.x 路径对称,往返都经过同一个设备(OpenWrt)从 123 网段访问 4.200/201(服务器):去程:123.x → 123.250(OpenWrt)→ 4.250(OpenWrt)→ 4.200回程:4.200 → 4.1(默认网关) → 4.250(OpenWrt)→ 123.250 → 123.x 路径不对称,回程多绕了一圈经过 4.1为什么路径不对称会导致问题?4.200 没有去 123 网段的路由,只有默认路由指向 4.1所以 4.200 回包时发给了 4.1,4.1 再转给 OpenWrtOpenWrt 的防火墙做连接跟踪(conntrack),发现:去程时看到了这个连接但回程包是从 4.1 来的,不是从 4.200 直接来的连接状态出现异常更关键的是 4.200 的防火墙:它的 firewalld 规则要求端口 80 必须是 ctstate NEW,UNTRACKED从 123.x 来的包,因为非对称路由,连接状态不正常被防火墙的最后一条 REJECT 规则拒绝了为什么 4.1(路由器)没问题?4.1 的防火墙是空的(你查过 iptables -L 是空的)路由器设备不做严格的连接状态检查即使路径稍微绕一下,路由器也能正常处理SNAT 如何解决问题?SNAT 把源 IP 改成 OpenWrt 的 IP(4.250),强制让 4.200 的回包直接回给 4.250,而不是回给 4.1,从而实现了路径对称:去程:123.x → OpenWrt(改成 4.250)→ 4.200回程:4.200 → 4.250(直接回)→ OpenWrt → 123.x这样防火墙的连接跟踪就正常了。由于来回路由不对称,且路由器防火墙规则相对宽松而其他主机(此处是Centos7)则有相对严格的防火墙规则[root@localhost conf.d]# iptables -L IN_public_allow -n -v --line-numbersChain IN_public_allow (1 references)num pkts bytes target prot opt in out source destination ...2 13 748 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ctstate NEW,UNTRACKED...IN_public_allow 链的规则中,端口 80 只允许 ctstate NEW,UNTRACKED 的连接关键在于 ctstate NEW,UNTRACKED。从 123 网段过来的连接,经过了 OpenWrt 的 NAT 转发,连接状态可能不是 NEW 或 UNTRACKED,而是 RELATED 或其他状态,所以被防火墙拒绝了。这里他让我去挨个修改4网段内的所有主机防火墙规则,(修改 firewalld 的 public zone,允许端口 80 的所有连接状态),我骂了他一顿,让他上网找案例,最后找到案例Simple static routes not working when firewall+masquerading is active说在防火墙和NAT开启的情况下,静态路由无法工作,需要添加SNAT规则,对于SNAT,我摘取AI的回答SNAT 是 **Source NAT(源地址网络地址转换)**的缩写。简单解释SNAT 的作用就是修改数据包的源 IP 地址。举个例子没有 SNAT 的情况:123网段的机器 (192.168.123.50) 访问 4网段的机器 (192.168.4.200)发送的包:源IP: 192.168.123.50目标IP: 192.168.4.200192.168.4.200 收到的包显示:来自 192.168.123.50有 SNAT 的情况(在 OpenWrt 上做 SNAT):123网段的机器 (192.168.123.50) 访问 4网段的机器 (192.168.4.200)原始包:源IP: 192.168.123.50目标IP: 192.168.4.200经过 OpenWrt (192.168.4.250) 的 SNAT 处理后:源IP: 192.168.4.250 ← 被改了!目标IP: 192.168.4.200192.168.4.200 收到的包显示:来自 192.168.4.250为什么需要 SNAT?在你的场景中,SNAT 解决了回程路由的问题:没有 SNAT:123.50 发包给 4.200(源IP是 123.50)4.200 收到后要回复给 123.504.200 查路由表,发现没有去 123 网段的路由,就从默认网关 4.1 出去回包路径变了,导致防火墙的连接跟踪出问题有 SNAT:123.50 发包,OpenWrt 改成源IP 是 4.2504.200 收到包,以为是 4.250 发来的4.200 回复给 4.250(同一个网段,直接回复)OpenWrt 收到回包,再转回给 123.50往返路径都经过 OpenWrt,路径对称,防火墙正常工作常见的 NAT 类型SNAT(Source NAT): 改源 IP,用于让内网访问外网DNAT(Destination NAT): 改目标 IP,用于端口转发MASQUERADE: 自动 SNAT,常用于家用路由器上网你家里的路由器其实就在用 MASQUERADE(一种自动的 SNAT),让你的手机、电脑可以共享一个公网 IP 上网。所以我们需要的配置文件如下vi /etc/config/firewall# 123网段访问4网段时做SNATconfig nat option family 'ipv4' option src 'wan' option dest 'lan' option target 'SNAT' option snat_ip '192.168.4.250'# 4网段访问123网段时做SNAT config nat option family 'ipv4' option src 'lan' option dest 'wan' option target 'SNAT' option snat_ip '192.168.123.250'/etc/init.d/firewall restart问他要到了luci的操作步骤,在Network-Firewall菜单中的NAT选项卡中,我的OpenWrt版本是19.07.8,表单如下第一条规则(123网段访问4网段)Name: SNAT_123_to_4Protocol: AnyOutbound zone: lan(选择 lan,对应 eth0 / 4网段侧)Source address: 192.168.123.0/24(填写 123 网段)Destination address: 192.168.4.0/24(填写 4 网段)Action: SNAT - Rewrite to specific source IP or portRewrite IP address: 192.168.4.250点击 Save第二条规则(4网段访问123网段)Name: SNAT_4_to_123Protocol: AnyOutbound zone: wan(选择 wan,对应 eth1 / 123网段侧)Source address: 192.168.4.0/24(填写 4 网段)Destination address: 192.168.123.0/24(填写 123 网段)Action: SNAT - Rewrite to specific source IP or portRewrite IP address: 192.168.123.250点击 Save最后点击页面顶部或底部的 Save Apply 按钮应用配置。最后还需要将GeneralSettings中Forward的reject改为accept配置后完成了我的需求,此次折腾基本全是靠AI完成的,因为每个人的网络拓扑以及应用场景不一样,对于这些概念的说法也很不一样,很难从搜索引擎中找到跟你完全相同的案例,而AI靠着能与我们对话的特性,可以逐步了解我们的需求,帮我们寻求答案,虽然他会给你胡编乱造,将猜测作为事实的去给你提供答案,但只要你在关键时刻及时制止他,将他拉回正轨,他也还能是我们的好帮手!
继续阅读»
2026-02-02
31
之前都是在虚拟平台安装Centos,第一次使用U盘在实体机上安装,使用的镜像是CentOS-7-x86_64-Minimal-2009.iso进不了安装页面,卡在Starting dracut initqueue hook,网上搜索得知是由于安装程序无法确定安装文件的位置,解决方法是修改U盘的驱动器名称,Centos默认会寻找Label名为"CentOS 7 x86_64"驱动器加载安装程序,不知道是不是由于U盘是使用Windows烧录的原因,磁盘名称有长度限制变成了“CentOS 7 x8”,导致无法正确启动安装程序,包括直接复制iso文件中的内容到U盘根目录下时,不正确设置驱动器名称时也会出现此情况,解决方法如下:在选择U盘引导后的引导启动界面选择第一项"Install CentOS 7",按键盘E键修改,修改前:linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet修改后:linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x8 quiet改为U盘实际的名称,按CTRL+X,即可顺利完成安装。---------结束----------------------------------------下面说我踩过的坑,我参照网上的使用安装U盘实际挂载路径代替LABEL方式进行指定也不能正常安装,因为我最开是直接解压复制iso文件到U盘的,LABEL值为空,所以第一时间没有考虑修改Label,这里说一下使用实际挂载路径的修改方式1.先查看挂载的磁盘,在引导时按E修改linuxefi /images/pxeboot/vmlinuz linux dd nomodeset quietCTRL+X后可以查看到所有的磁盘挂载路径,我的是sda12.记录磁盘路径后(一般为sda/sdb/scd等字样,我的U盘是sda1),重启继续修改引导项将linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet修改为linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:/dev/sda1 quiet替换其中路径为实际的安装U盘路径,CTRL+X后可以正常加载安装程序了,因为我偷懒使用直接指定路径的方式,导致在最后一步开始安装时出现“设置基础软件仓库时出错”的错误,安装程序又无法找到软件包了,这时候我还没意识到是因为我通过linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:/dev/sda1 quiet指定导致的,一直在网上找在线的软件包网址,每次尝试又会花费近十分钟,也尝试过添加inst.repo参数,都以失败告终,最后决定通过修改实际LABEL方式,成功了,我以为LABEL跟直接写挂载路径一样,结果并不一样。最后修改linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x8 quiet,也就是磁盘名称为“CentOS 7 x8”的情况,完成安装。下面说一下Centos停止更新后软件源的设置,我先贴一下默认的仓库配置文件,位于/etc/yum.repos.d/CentOS-Base.repo# CentOS-Base.repo## The mirror system uses the connecting IP address of the client and the# update status of each mirror to pick mirrors that are updated to and# geographically close to the client. You should use this for CentOS updates# unless you are manually picking other mirrors.## If the mirrorlist= does not work for you, as a fall back you can try the# remarked out baseurl= line instead.##[base]name=CentOS-$releasever - Basemirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=osinfra=$infra#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#released updates[updates]name=CentOS-$releasever - Updatesmirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=updatesinfra=$infra#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that may be useful[extras]name=CentOS-$releasever - Extrasmirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=extrasinfra=$infra#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that extend functionality of existing packages[centosplus]name=CentOS-$releasever - Plusmirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=centosplusinfra=$infra#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/gpgcheck=1enabled=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7可以看到centos通过设置mirrorlist在更新源时获取多个镜像源,根据实际下载速度会进行切换,现在基本所有的镜像源都关掉了,就算有能用的估计过不了多久也会关闭,但是CentOS留了一个Vault存档源:vault.centos.org,可以设置软件包从这里面下载,虽然慢点,但一定会比其他非官方的活的更久。只需要注释掉配置文件中每个片段的mirrorlist行,添加baseurl为vault.centos.org的域名的路径即可,例如[base]中,添加baseurl=http://vault.centos.org/7.9.2009/os/$basearch/,其他类似,完整配置文件如下(注意我的写法是固定为7.9.2009版本,如果你的版本不一致,或者后续需要升级系统,可以尝试用他示例的$releasever变量方式)# CentOS-Base.repo## The mirror system uses the connecting IP address of the client and the# update status of each mirror to pick mirrors that are updated to and# geographically close to the client. You should use this for CentOS updates# unless you are manually picking other mirrors.## If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead.##[base]name=CentOS-$releasever - Base#mirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=osinfra=$infra#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/baseurl=http://vault.centos.org/7.9.2009/os/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#released updates [updates]name=CentOS-$releasever - Updates#mirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=updatesinfra=$infra#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that may be useful[extras]name=CentOS-$releasever - Extras#mirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=extrasinfra=$infra#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that extend functionality of existing packages[centosplus]name=CentOS-$releasever - Plus#mirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=centosplusinfra=$infra#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/gpgcheck=1enabled=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7最后执行以下命令后,就可以正常安装软件了sudo yum clean allsudo yum makecache参考:https://blog.csdn.net/xiaoma19961101/article/details/130391436https://blog.csdn.net/weixin_70065088/article/details/144565986
继续阅读»
2025-07-13
430
现有两个网口接入不同的网络,网络A带宽大、延迟高,网段为192.168.4.1;网络B带宽小、延迟低,网段为192.168.8.1想要日常流量走网络A,指定ip或ip段走网络B,可以通过配置路由表实现。网络接入计算机时,系统会默认为该网段添加一条路由表规则 0.0.0.0 (所有ipv4地址)转发 至接入网络的网关地址。多网口设备连接多个网络也是如此。但是他们的越点不同,当匹配到多个规则时系统会选择越点较低的那条规则windows通过route print命令可以查看系统路由表C:\Users\Administratorroute print===========================================================================接口列表 15...c4 83 4f 16 59 c3 ......Intel(R) I210 Gigabit Network Connection 12...00 0c 29 32 93 1c ......Intel(R) PRO/1000 MT Network Connection 1...........................Software Loopback Interface 1 13...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter 11...00 00 00 00 00 00 00 e0 Microsoft Teredo Tunneling Adapter 14...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2===========================================================================IPv4 路由表===========================================================================活动路由:网络目标 网络掩码 网关 接口 跃点数 0.0.0.0 0.0.0.0 192.168.4.1 192.168.4.201 266 0.0.0.0 0.0.0.0 192.168.8.1 192.168.8.102 21其他规则....我这边的情况就是,系统添加了两条0.0.0.0 至对应两个网络的网关规则,流量通过两个网口获取的ip地址出口。我们需要做的是,删掉系统默认配置的0.0.0.0规则,添加0.0.0.0规则出口为网络A(192.168.4.1),指定ip地址出口为网络B(192.168.8.1)删除默认路由规则route delete 0.0.0.0添加0.0.0.0路由规则至网络Aroute add 0.0.0.0 mask 0.0.0.0 192.168.4.1添加指定的ip出口为网络Broute add 42.194.134.128 mask 255.255.255.255 192.168.8.1以上命令执行后可通过route print查看规则是否添加成功可以在命令末尾追加-p 使配置永久生效。metric 10 指定越点为10示例route add 0.0.0.0 mask 0.0.0.0 主网关IP metric 10 -p我这边只是临时使用,加上电脑不关机,因此没有添加越点和永久生效最后的路由表C:\Users\Administratorroute print===========================================================================接口列表 15...c4 83 4f 16 59 c3 ......Intel(R) I210 Gigabit Network Connection 12...00 0c 29 32 93 1c ......Intel(R) PRO/1000 MT Network Connection 1...........................Software Loopback Interface 1 13...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter 11...00 00 00 00 00 00 00 e0 Microsoft Teredo Tunneling Adapter 14...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2===========================================================================IPv4 路由表===========================================================================活动路由:网络目标 网络掩码 网关 接口 跃点数 0.0.0.0 0.0.0.0 192.168.4.1 192.168.4.201 11 42.194.134.128 255.255.255.255 192.168.8.1 192.168.8.102 21其他规则....这样就实现访问42.194.134.128时走的低延迟的网络B,其他流量走网络A实现大带宽访问互联网
继续阅读»
2025-06-19
545
因为屏幕大小限制,经常需要将Iframe页面在新标签页打开,因此开发一个扩展程序快速在新标签页打开IframeChrome扩展程序需要一个manifest.json用于定义一些基础数据manifest.json:{ "name": "Iframe In New Tab", "description": "Open iframe Page In New Tab Quickly", "version": "1.0", "manifest_version": 3, "action": { "default_popup": "popup.html", "default_icon": "newtab_16.png" }, "permissions": [ "contextMenus" ], "background": { "service_worker": "background.js", "type": "module" }, "icons": { "16": "newtab_16.png", "48": "newtab_48.png", "128": "newtab_128.png" }}需要注意action、permissions、backgroundaction定义安装扩展程序后,浏览器右上方扩展程序按钮相关行为,default_popup为点击扩展程序图标后对应的页面,因为我们程序没有交互,因此给出简单提示popup.html:htmlstyle html, body { min-width: 205px; min-height: 33px; } hr { width: 100%; }/stylebody h1/h1 p bIframe In New Tab/b br Right-click the iframe area for options. /p/body/htmlpermissions为该扩展程序需要的权限,我们的扩展程序需要在浏览器创建右键菜单,因此声明contextMenus扩展程序可以在后台通过扩展程序的"service worker"监听浏览器事件,background用于指定你的相关监听代码,我们会在这里监听扩展程序安装事件,为页面创建右键菜单,以及该菜单的点击事件background.js:// 注册扩展程序安装事件,会在扩展程序被安装、扩展程序更新、浏览器更新时执行chrome.runtime.onInstalled.addListener(function () { chrome.contextMenus.create({ id: "iframe_menu", title: 'Open In New Tab', type: 'normal', contexts: ['frame'] });});// 监听菜单点击事件chrome.contextMenus.onClicked.addListener((info, tab) = { if (info.menuItemId === "iframe_menu") { // 获取iframe的URL const frameUrl = info.frameUrl; if (frameUrl) { chrome.tabs.create({ url: frameUrl, index: tab.index + 1 }); } }});将以上代码及相关图片资源放入一个文件夹中,打开Chrome扩展程序页面,启用开发者模式后,点击加载已解压的扩展程序,即可使用扩展程序使用效果展示:[图片]完整源码:Github参考资料:Hello World extension
继续阅读»