WebKit三件套(3):WebKit之Port篇:即时看

2023-04-09 20:24:25 来源: 博客园

了解其有关Port方面的设计,从而了解究竟如何能移植WebKit到自己的应用中。

WebKitPort方面的内容是可以很广的,例如可将不同的图形库、网络库与WebCore集成,提供不同的Port接口供外部程序使用等,例如同样在windows平台上可以运行的Google Chrome和Safari就是针对WebKit的不同移植。

我们想了解有关Port方面的主要内容在于提供不同的Port接口供外部程序使用以及如何与外部程序交互,因为WebKit中的其它两部分WebCore、Javascript实现,从逻辑上讲是不直接提供接口给外部程序使用的。同时为了完成浏览器的核心功能,WebKit也需要从外部程序中通过Port接口的方式获取一些支持。从这个角度讲WebKit作为一个相对独立的整体,它与外部程序之间的交互也就有一组相对固定的接口来定义及维护它们之间的关系,它们之间的关系与插件跟浏览器引擎之间的关系完全类似,接口相当一组协议,有的是由WebKit来实现,而供外部程序调用;有的的正好相反。通过前面的了解我们知道WebKit的主要功能集中在分析Html、渲染布局Web内容以及Javascript实现方面等,而这些Web内容显示在哪个窗口及消息处理的启动循环等都需要由外部程序来提供


(相关资料图)

初步分析已有WebKit Port移植实现

与WebCore交互接口的实现

在WebKit源代码目录结构中WebKit目录下分别包含gtk、mac、qt、win、wx目录,其分别对应不同的Port移植方式。

在每一个目录下面都包括WebCoreSupport目录。

在不同的WebCoreSupport目录下分别包含有对类接口:WebCore::ChromeClient、WebCore::ContextMenuClient、WebCore::DragClient、WebCore::EditorClient、WebCore::FrameLoaderClient、WebCore::InspectorClient等的实现,它们代表外部程序提供给WebKit内部使用的接口实现,其中WebCore::ChromeClient、WebCore::FrameLoaderClient非常重要。

初步了解其接口定义能基本了解其对应的含义,这些接口往往需要由Port移植部分来提供实现,往往由WebKit内部根据一定的条件来调用。下面初步来了解几个主要接口:

WebCore::ChromeClient接口:

//往往在运行window.open脚本时调用,以便由外部程序决定如何打开一个新页面如新建一个窗口、新建一个Tab页签等;

virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&, const WebCore::WindowFeatures&);

//通知外部程序显示页面;

virtual void show();

virtual bool canRunModal();

//通知外部程序以Modal的方式显示页面;

virtual void runModal();

//通知外部程序显示JS警告提示窗口;

virtual void runJavaScriptAlert(WebCore::Frame*, const WebCore::String&);

//通知外部程序显示JS警告确认窗口;

virtual bool runJavaScriptConfirm(WebCore::Frame*, const WebCore::String&);

WebCore::FrameLoaderClient接口:

//检查是否拥有主页面窗口;

virtual bool hasWebView() const;

//检查是否拥有页面窗口;

virtual bool hasFrameView() const;

//通知外部程序有关http请求开始、结束、获取数据等,如通常浏览器状态栏显示的信息;

virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&);

virtual void dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long identifier, int lengthReceived);

virtual void dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long identifier);

virtual void dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceError&);

//通知外部程序WebKit内部主要事件处理,以便外部程序及时响应或创建维护数据等

virtual void dispatchDidHandleOnloadEvents();

virtual void dispatchDidReceiveServerRedirectForProvisionalLoad();

virtual void dispatchDidCancelClientRedirect();

virtual void dispatchWillPerformClientRedirect(const WebCore::KURL&, double interval, double fireDate);

virtual void dispatchDidChangeLocationWithinPage();

virtual void dispatchWillClose();

virtual void dispatchDidReceiveIcon();

virtual void dispatchDidStartProvisionalLoad();

virtual void dispatchDidReceiveTitle(const WebCore::String&);

virtual void dispatchDidCommitLoad();

virtual void dispatchDidFinishDocumentLoad();

virtual void dispatchDidFinishLoad();

virtual void dispatchDidFirstLayout();

//告诉外部程序需要提供切换到一个新页面状态。此时外部程序往往会新建FrameView,并将FrameView与Frame关联,设置原生窗口句柄及其消息处理机制等等;

virtual void transitionToCommittedForNewPage();

//告诉外部程序创建一个新的Frame,如遇到html中iframe标签时,需要外部程序创建一个新的Frame及原生窗口句柄等;

virtual PassRefPtr createFrame(const WebCore::KURL& url, const WebCore::String& name, WebCore::HTMLFrameOwnerElement* ownerElement,

const WebCore::String& referrer, bool allowsScrolling, int marginWidth, int marginHeight);

//告诉外部程序需要创建一个Plugin实例,从而创建其原生窗口等等;

virtual WebCore::Widget* createPlugin(const WebCore::IntSize&, WebCore::Element*, const WebCore::KURL&, const Vector&, const Vector&, const WebCore::String&, bool loadManually);

对WebCore中的page/loader等方面的类提供对应Port的实现支持

如EventHandlerWin.cpp、FrameLoaderWin.cpp、DocumentLoaderWin.cpp、DocumentLoaderWin.cpp、WidgetWin.cpp、KeyEventWin.cpp等

实现WebView及WebFrame等以便外部程序嵌入WebKit

不同的Port移植对WebView及WebFrame的定义及实现有所不同,但其与WebCore中的Page、Frame之间的关系大致与浅谈WebKit之WebCore篇图一描述相一致。

具体关于WebView、WebFrame的定义与实现,特别是初始化时的动作可根据不同的Port移植而有所不同,同时初始化时会将上面提到的WebCore Port接口实现告诉WebKit内部。主要示例代码如下:

staticvoidwebkit_web_view_init(WebKitWebView*webView){WebKitWebViewPrivate*priv=WEBKIT_WEB_VIEW_GET_PRIVATE(webView);webView->priv=priv;priv->corePage=newPage(newWebKit::ChromeClient(webView),newWebKit::ContextMenuClient(webView),newWebKit::EditorClient(webView),newWebKit::DragClient,newWebKit::InspectorClient);priv->mainFrame=WEBKIT_WEB_FRAME(webkit_web_frame_new(webView));priv->lastPopupXPosition=priv->lastPopupYPosition=-1;priv->editable=false;................................priv->webSettings=webkit_web_settings_new();webkit_web_view_update_settings(webView);..................................}WebKitWebFrame*webkit_web_frame_new(WebKitWebView*webView){g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView),NULL);WebKitWebFrame*frame=WEBKIT_WEB_FRAME(g_object_new(WEBKIT_TYPE_WEB_FRAME,NULL));WebKitWebFramePrivate*priv=frame->priv;WebKitWebViewPrivate*viewPriv=WEBKIT_WEB_VIEW_GET_PRIVATE(webView);priv->webView=webView;priv->client=newWebKit::FrameLoaderClient(frame);priv->coreFrame=Frame::create(viewPriv->corePage,0,priv->client).get();priv->coreFrame->init();returnframe;}

Chrome中对Port移植方面的实现

其基本上与其他Port移植类似,其主要代码在webkit\glue目录中,可重点关注带client_impl.cc后缀的文件、webview_impl.cc、webwidget_impl.cc等;但是其究竟如何创建原生windows窗口、如何创建Render进程、Render进程与创建的原生windows窗口的关系如何等需要更进一步深入研究Chrome,如果能从上面提到的Port部分入手也许很快就可得到答案,这一点以后有机会单独研究。

Android中对Port移植方面的实现

其实现有点特殊,由于Andriod将WebKit以一个Java类接口的方式提供给Java环境使用(不像上面提到的Chrome、Safari等都是将WebKit以 一个C++动态或静态库的方式供C/C++外部程序调用),这样WebKit内部与外部即JavaVM的交互(如上面提到的ChromeClient、 FrameLoaderClient接口实现)需要一个Bridge类来协调处理,同时WebView、WebFrame接口绑定给JavaVM的jni接口实现也需要通过这个Bridge来支持协调处理。具体可详细参考android源码代码中WebCore\platform\android目录下的源文件。

通过进一步了解WebCore Port接口及其实现,可以加深这样一个认识:

如果从MVC的角度来看整个基于WebKit的浏览器(当然不尽合理),WebKit的Port部分相当于V部分,它提供显示页面内容及其辅助信息(如提示状态)的场所(即原生窗口)以及控制该显示场所的状态变化及消息响应(如改变大小、鼠标移动等);而M部分往往由WebCore来实现,至于WebCore如何组织DOM则往往由htmlparser部分根据DOM定义来组织,如何在提供的显示场所显示Web内容则往往由WebCore中的layout部分来实现,其中充分利用了Css定义来布局显示该显示的内容;一旦涉及控制或动态处理往往由Port部分发起而由Javascript脚本来实现处理,其任务由JavascriptCore或V8来完成。

一般说来新打开一个页面,Port部分需要提供一个主显示场所(即原生窗口),如果页面中含有iframe标签,则需要在主显示场所内创建一个子显示场所,以显示iframe标签对应src的内容;如果页面中含有embed/object等插件标签同样往往也需要在主显示场所内创建一个子显示场所(除非windowless),以交由插件实现在提供的显示场所中显示内容。

特别需要说明的是我们通常看到的页面表单元素input text field、textArea、button、radiobutton等往往不像window图形库中的按钮、菜单、输入框等会对应一个原生窗口,页面中的表单元素在一个显示场所(即原生窗口)中完全是利用Css等通过layout方式来达到我们所看到的类似原生按钮、输入框、列表框、滚动条等效果,其中特别是能准确定位元素大小、设置focus、光标显示、响应事件等,这充分的说明了浏览器引擎内部布局部分的威力所在。

从另外一个角度来看一个页面一般说来(除非遇到iframe或插件需要另外提供一块子画布)相当于一块画布,浏览器引擎能在其精确的位置绘制不同颜色的文字、图片、图标等,同时根据当前的鼠标及一个模拟的输入提示光标位置,接收键盘输入操作。页面中的绝大多数元素与原生的窗口元素几乎没有关联,完全通过组合、布局、准确定位来处理一切。。。

如何利用WebKit?

了解WebKit Port部分,对我们如何利用WebKit有非常现实的意义,目前已经将WebKit移植到多种平台如windows、qt、gtk、mac、wx、java、framebuffer等,甚至移植到python、ruby及3D等环境中去。通过借鉴或利用这些已有的WebKit Port实现,完全可以将WebKit发扬广大。

前一阶段正好得到一个网友抓取网页的需求,试想目前移植利用WebKit基本都用来显示页面,往往涉及图形显示方面,但随着ajax及动态页面的广泛使用,未来动态生成的页面越来越多,传统的搜索引擎仅仅抓取静态的页面内容显然是不够的,现代化的搜索引擎应该能抓取动态的页面内容,这样它从某种意义讲相当于一个能获取对应的动态页面但不真正显示出其内容的浏览器,这样一个搜索引擎不仅能分析DOM树,同时能运行Javascript脚本(如运行ajax),以真正完整获取页面内容,其实这样一个搜索引擎如果利用WebKit来实现的话,应该是个不错的选择,在我们了解WebKit Port部分之后,我们是否可以来模拟一个不真正具备图形显示方面的Port,进而充分利用WebKit中的WebCore及Javascript实现方面的功能呢?一点想法,今后有机会可以试试,或许Google、Yahoo的搜索引擎已经有了相关的实现,不知是否使用的就是WebKit?应该不会,有谁清楚的话,烦请通知一声。

但愿我们也能利用利用WebKit整出一个象模象样的东东如机顶盒浏览器、手机浏览器等等。。

参考资源

  • The WebKit Open Source Project

  • Google Chrome Home

  • Android - An Open Handset Alliance Project

原文:http://ourpgh.blogspot.com/2008/10/webkitport.html

转载本站文章《WebKit三件套(3):WebKit之Port篇》,请注明出处:https://www.zhoulujun.cn/html/webfront/browser/webkit/2021_0422_8632.html

标签:

上一篇 :

下一篇 :

WebKit三件套(3):WebKit之Port篇:即时看

了解其有关Port方面的设计,从而了解究竟如何能移植WebKit到自己的应用中。WebKitPort方面的内容是可以...

04-09 20:24:25

昆明边检站通关今年首个入境旅游团

00:504月8日12时许,40名来自泰国曼谷的团队旅客走进昆明长水国际机场入境边检大厅,他们即将开启四晚五...

04-09 18:40:49

中国联通在广东率先完成全国最大规模RedCap预商用验证|微动态

【中国联通在广东率先完成全国最大规模RedCap预商用验证】《科创板日报》9日讯,据中国联通官方微博消息...

04-09 16:50:37

上海黄浦到怀化专线物流欢迎您

上海闵行托运到宜宾专线物流欢迎您货运 公司 附近 有哪些 几天到 查询 价格 电话 整车 零担 ...

04-09 15:10:09

创投通:3月新消费融资数环比增长9% 消费IPO浪潮袭来_世界微资讯

|新消费日报9日讯,创投通数据显示,今年3月国内新消费领域共发生97起融资事件,环比2月增长9 09%。据...

04-09 13:08:22

亚冠联赛已在多哈重启广州恒大将于11月22日亮相|世界观天下

来源:羊城晚报亚冠联赛已在多哈重启,广州恒大将于11月22日亮相。在柔佛DT退赛后,恒大队所在G组只剩三...

04-09 11:26:18

环球看点!怎么查询手机绑定了哪些网易账号和密码_怎么查询手机绑定了哪些网易账号

1、首先需要使用浏览器打开网易账号中心。2、进入以后登录个人邮箱账号。3、2、点击账号信息中的“手机...

04-09 09:47:14

全球播报:最新年报出炉 国泰新经济灵活配置混合A持仓曝光!加仓减仓这些股…

最新年报国泰新经济灵活配置混合A持仓曝光!加仓减仓这些股…

04-09 07:51:43

如何鉴别皮衣质量 鉴别皮衣质量的方法 全球百事通

1、外观鉴别:真皮光面服装的外观有明显的毛孔,有一定规则,但规则性不很强;往往表面粗细不很一致,有...

04-09 05:54:14

重壳蟹怎么挑选?-环球头条

1、看外壳在挑选螃蟹时,第一眼看到的就是螃蟹的外壳,外壳是青中透亮的比较坚硬,看起来有光泽又鲜亮,...

04-09 00:03:48

全球短讯!蒲公英的“黄金搭档”找到了,搭配泡水喝,肝变干净,睡觉也香了

飘似羽,逸如纱,秋来飞絮赴天涯。献身喜作医人药,无意芳名遍万家。这句诗出自左河水的《思佳客 蒲公...

04-08 20:59:03

各部门齐抓共管 6月底前完成所有自建房摸底排查|当前独家

央视网消息:在4月7日举行的全国自建房安全专项整治工作电视电话会议上,住房和城乡建设部要求,各地各...

04-08 19:12:45

全球视讯!各种表面处理的优缺点_常见的表面处理有哪些

今天小编肥嘟来为大家解答以上的问题。各种表面处理的优缺点,常见的表面处理有哪些相信很多小伙伴还不...

04-08 17:04:12

白条冻结149需要还款吗,需要 世界快看点

白条冻结149需要还款,白条是第三交易平台为了提高用户网上消费推出的一款个人消费贷款产品,用户在使用...

04-08 13:56:24

汽车零部件:方向盘配套智能“纽扣” 可指尖遥控手机|全球速讯

汽车已经成为人们生活的必须品了,很多关于汽车的正确使用方法和小技巧大伙不熟系,现在对于汽车当中的...

04-08 11:58:01

环球微速讯:全屋赠送品牌装修?当心掉进商家的合同陷阱!

家装市场中装修公司常常会 "赠送装修 "赠送的装修质量如何保证?质量标准该听谁的呢?2020年,南京王...

04-08 10:19:52

板材周度行情总结及下周建议

本周总结:1、本周钢材品种价格大幅下跌。现货方面,热轧板卷跌108元 吨、中厚板跌51元 吨螺纹钢跌107...

04-08 09:03:21

红星二锅头的包装为何分为三种颜色?不同颜色区别很大,看懂再买

要说如今的酒圈当中,茅五剑占据着现在白酒的天花板,可要说全国人民最爱的一款酒其实并不是茅五剑,而...

04-08 06:56:10

环球观察:两战仅丢9分!从布莱克尼到琼斯!再这样打下去,真要冲击NBA了

在2022-23赛季最后一场常规赛当中,广州男篮客场以104-87战胜了吉林男篮,成功以联盟第九名的身份闯进了...

04-08 04:48:59

如何使用PS软件中的污点修复工具:当前动态

相信很多小伙伴都有在使用PS软件,其中的污点修复工具如何才能使用呢?下面小编就来为大家具体介绍。具...

04-07 23:07:56

全过程可追溯,上海每包危废都有“身份证”

▲崇明嘉瀛公司危废焚烧线每天,一辆辆危废收运车驶入崇明嘉瀛公司,将来自企业的危险废物有序放置在指...

04-07 20:09:15

9月任天堂Switch日本销量达49.5万部,同比增1.3倍

《香港经济日报》10月5日消息,日本游戏情报媒体Famitsu统计显示,9月(8月29日至9月25日)任天堂Switch

04-07 18:46:18

舌头上有红点说明什么_舌头上有红点是什么表现

1、舌上有红点,通常被认为是中医舌诊中热证的表现。从红点的位置和颜色可以判断哪些脏腑受内热影响。比...

04-07 18:03:47

为进市委班子贿选拉票的落马书记减刑被驳回,此前已四获减刑|世界观速讯

”在换届选举期间,刘培中套取财政资金95万元,向下属索要款物共计折合人民币98 168万元,采取统一调配...

04-07 16:57:34

全球头条:新款GPD掌机信息泄露:配备锐龙7 7840U,屏幕分辨率为1080P

Windows掌机近年来发展势头不错,许多厂商也加入了竞争行列。由于AMD在核显性能方面具备优势,加上掌机...

04-07 15:55:12

环球短讯!甘肃武都:开展科普培训以助农促增收

中国发展网讯浩利禄记者王斌报道“40公分就是两剪子的高度,这个等会儿咱们在椒树地里给大家示范。”近...

04-07 15:17:50

广东发力新型储能产业再出新招!对地市引进重大项目给予奖补:环球视点

4月4日,广东省制造强省建设领导小组办公室在日前发布《广东省推动新型储能产业高质量发展的指导意见》...

04-07 13:57:24

即时:爱旭股份:前三季度归母净利润13.9亿元,天津基地光伏电站装机容量改为5.12MW

爱旭股份10月30公告,2022年前三季度营收2528亿元,同比增长130 65%,销售规模扩大,售价上涨,收入增加;归

04-07 13:00:35

澳大利亚同一人声明公证认证怎么办? 当前通讯

澳大利亚同一人声明公证认证怎么办?随着加入澳大利亚籍的中国人日益增多,如何证明之前中国身份和现在...

04-07 11:43:31

环球微头条丨商务部美大司负责人就澳大利亚政府禁止在联邦公共部门设备上使用TikTok事答记者问

商务部美大司负责人就澳大利亚政府禁止在联邦公共部门设备上使用TikTok事答记者问

04-07 10:55:19

走向复兴!骑士本赛季战绩近7年来最好 净胜20+场数联盟并列第1

NBA常规赛,骑士118-94大胜魔术。至此,骑士本赛季已取得51胜,这也是自2016-17赛季(51胜31负)以来,...

04-07 10:23:49

最资讯丨美国职业棒球大联盟赛事首次来苏

四月的苏州春意盎然,2023MLBCUP青少年棒球公开赛·春季赛在苏州的举办更是掀起了一股棒球热潮。日前,...

04-07 08:30:23

发力对公业务 多家银行公司类贷款占比提升

发力对公业务多家银行公司类贷款占比提升,贷款,信贷,金融,中信银行,招商银行,光大银行,银行公司,收入证明

04-07 07:07:10

全球信息:北京劳动者之歌|陈磊磊:铁路行车公寓里的“大管家”

北京劳动者之歌|陈磊磊:铁路行车公寓里的“大管家”

04-07 04:54:43

大众波罗1.4自动挡新车报价_大众波罗1 4自动挡-全球速读

1、品质肯定是POLO好一些,岁说POLO和晶锐是同胞兄弟,单POLO的组装和校调个部件之间的连接和处理都好与...

04-07 00:49:34

先锋报:梅西空闲时间一直关注巴萨,已注意到球迷们高呼他的名字

直播吧4月6日讯据西班牙《先锋报》报道,巴萨球迷在昨晚西班牙国家德比的比赛中高喊梅西的名字,后者已...

04-06 21:58:03

景甜风波后现身,包裹严实状态不佳,张继科不回应照常生活好讽刺:观热点

众所周知,张继科这场风波总共有三个关键人物,一位是被曝涉赌的张继科,第二位是爆料者李敖微,第三位...

04-06 20:33:56

乘联会:初步统计3月乘用车零售159.6万辆 同比持平|环球焦点

易车讯据中国汽车流通协会汽车市场研究分会(乘联会)销量初步统计,3月1-31日乘用车市场零售159 6万辆...

04-06 19:24:13

赣州哪里有礼物盒卖 观察

赣州哪里有礼物盒卖,楼主叫那里礼物盒的厂家,礼品盒厂家是一家,礼品盒包装盒,文化的礼品盒。主要工...

04-06 18:24:34

天天头条:北京万胜快乐娃科技有限公司怀柔商业街分公司被罚款5000元

中国质量新闻网讯近日从北京市市场监督管理局网站获悉,北京市怀柔区市场监督管理局对北京万胜快乐娃科...

04-06 18:05:09

报道:争创全国文明典范城市丨我市强化停车秩序管理让文明更到“位”

争创全国文明典范城市丨我市强化停车秩序管理让文明更到“位”

04-06 17:25:21

当前视讯!设计模式的概念和分类

设计模式是指在软件设计中,针对特定问题或特定场景的解决方案,是一种经过实践验证的最佳实践。

04-06 16:41:12

唐山银行收河北证监局警示函 基金销售业务五项违规-焦点日报

唐山银行收河北证监局警示函基金销售业务五项违规

04-06 15:59:40

热文:滴!普陀这辆普法“特快专列”到达华外实验,太有趣

为进一步提升青少年法治素养、护航未成年人健康成长,日前,长风新村司法所与日盈律师事务所、阳光社区...

04-06 14:41:58

全年44场 “北京市贯彻落实党的二十大精神”系列主题新闻发布启动

4月6日上午,由北京市人民政府新闻办公室组织召开的“北京市贯彻落实党的二十大精神”系列主题首场新闻...

04-06 13:48:31

一到春天就过敏?上海人最主要的过敏原不是花粉,竟是这三种!

春季是踏青游玩的好时节,也是过敏高发期。据中国天气网推出的全国花粉过敏指数地图显示,近期多地花粉...

04-06 12:31:43

保康消防:创新“一火一案一警示”消防宣传教育新模式

保康消防:创新“一火一案一警示”消防宣传教育新模式---这是保康县消防救援大队创新消防宣传的一次有益...

04-06 11:34:19

湖北2023年初级护师考试准考证打印入口已开通

湖北2023年初级护师考试准考证打印入口已开通由初级护师考试栏目提供,查找更多湖北2023年初级护师考试准...

04-06 11:00:36

徐州中欧班列一季度实现贸易额1.3亿美元_通讯

3月26日,随着今年一季度最后一班发往俄罗斯莫斯科的徐州中欧班列顺利开行,徐州中欧班列今年已累计开行...

04-06 10:13:11

读后感600字 读《欧也妮葛朗台》有感1600字_环球滚动

抄写作文网小编为大家提供读后感600字读《欧也妮葛朗台》有感1600字来供大家参考,欢迎阅读。读《学雷锋...

04-06 09:15:48

昆明边检站通关今年首个入境旅游团
中国联通在广东率先完成全国最大规模RedCap预商用验证|微动态
上海黄浦到怀化专线物流欢迎您
创投通:3月新消费融资数环比增长9% 消费IPO浪潮袭来_世界微资讯
亚冠联赛已在多哈重启广州恒大将于11月22日亮相|世界观天下
环球看点!怎么查询手机绑定了哪些网易账号和密码_怎么查询手机绑定了哪些网易账号
全球播报:最新年报出炉 国泰新经济灵活配置混合A持仓曝光!加仓减仓这些股…
如何鉴别皮衣质量 鉴别皮衣质量的方法 全球百事通
重壳蟹怎么挑选?-环球头条
全球短讯!蒲公英的“黄金搭档”找到了,搭配泡水喝,肝变干净,睡觉也香了
各部门齐抓共管 6月底前完成所有自建房摸底排查|当前独家
全球视讯!各种表面处理的优缺点_常见的表面处理有哪些
白条冻结149需要还款吗,需要 世界快看点
汽车零部件:方向盘配套智能“纽扣” 可指尖遥控手机|全球速讯
环球微速讯:全屋赠送品牌装修?当心掉进商家的合同陷阱!
板材周度行情总结及下周建议
红星二锅头的包装为何分为三种颜色?不同颜色区别很大,看懂再买
环球观察:两战仅丢9分!从布莱克尼到琼斯!再这样打下去,真要冲击NBA了
如何使用PS软件中的污点修复工具:当前动态
全过程可追溯,上海每包危废都有“身份证”
9月任天堂Switch日本销量达49.5万部,同比增1.3倍
舌头上有红点说明什么_舌头上有红点是什么表现
为进市委班子贿选拉票的落马书记减刑被驳回,此前已四获减刑|世界观速讯
全球头条:新款GPD掌机信息泄露:配备锐龙7 7840U,屏幕分辨率为1080P
环球短讯!甘肃武都:开展科普培训以助农促增收
广东发力新型储能产业再出新招!对地市引进重大项目给予奖补:环球视点
即时:爱旭股份:前三季度归母净利润13.9亿元,天津基地光伏电站装机容量改为5.12MW
澳大利亚同一人声明公证认证怎么办? 当前通讯
环球微头条丨商务部美大司负责人就澳大利亚政府禁止在联邦公共部门设备上使用TikTok事答记者问
走向复兴!骑士本赛季战绩近7年来最好 净胜20+场数联盟并列第1
最资讯丨美国职业棒球大联盟赛事首次来苏
发力对公业务 多家银行公司类贷款占比提升
全球信息:北京劳动者之歌|陈磊磊:铁路行车公寓里的“大管家”
大众波罗1.4自动挡新车报价_大众波罗1 4自动挡-全球速读
先锋报:梅西空闲时间一直关注巴萨,已注意到球迷们高呼他的名字
景甜风波后现身,包裹严实状态不佳,张继科不回应照常生活好讽刺:观热点
乘联会:初步统计3月乘用车零售159.6万辆 同比持平|环球焦点
赣州哪里有礼物盒卖 观察
天天头条:北京万胜快乐娃科技有限公司怀柔商业街分公司被罚款5000元
报道:争创全国文明典范城市丨我市强化停车秩序管理让文明更到“位”
当前视讯!设计模式的概念和分类
唐山银行收河北证监局警示函 基金销售业务五项违规-焦点日报
热文:滴!普陀这辆普法“特快专列”到达华外实验,太有趣
全年44场 “北京市贯彻落实党的二十大精神”系列主题新闻发布启动
一到春天就过敏?上海人最主要的过敏原不是花粉,竟是这三种!
保康消防:创新“一火一案一警示”消防宣传教育新模式
湖北2023年初级护师考试准考证打印入口已开通
徐州中欧班列一季度实现贸易额1.3亿美元_通讯
读后感600字 读《欧也妮葛朗台》有感1600字_环球滚动
杭州网红餐厅就餐7人拉肚子后续:餐厅餐具检出大肠菌群_速看料
X 广告
资讯
X 广告

Copyright ©  2015-2022 北冰洋畜牧网版权所有  备案号:沪ICP备2020036824号-3   联系邮箱:562 66 29@qq.com