导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2018/7/6 15:56:35
标题:
FMX中WebBrowser的问题
浏览:2546
加入我的收藏
楼主:
小白请教: 用10.2.3里的TWebBrowser打开图文混排的html文档和mht文档(单个文件网页文档)。 如果编译成win32/win64模式,两种文档可以正常显示; 如果编译成android模式,在手机上可以显示html文档中的文字,图片则有时显示,有时不显示;但无法打开mht文档。 肯请帮助,谢谢。
----------------------------------------------
-
作者:
2018/7/6 22:34:58
1楼:
https://www.reddit.com/r/AndroidQuestions/comments/7elfz5/how_to_open_mht_files_on_android_cant_seem_to/ https://www.experts-exchange.com/questions/27235278/open-mht-file-android.html https://stackoverflow.com/questions/11556059/display-mht-file-on-android and so... search for "android mht files" in google or your "search service"
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
2018/7/14 22:50:56
2楼:
想要单个文件,换个思路: 用 WebBroker 做一个真正的网站。网站内容放进一个 SQLite 数据库。如果只是图文混排的话,其实只需要放网页文件和图片文件进数据库就可以了。发布的时候,只需要发布这个 SQLite 的数据。 把这个基于 WebBroker 的 WebServer 内嵌到你的 APP 里面。你的 APP 本身就自带一个 WebServer。然后,你的 APP 里面的 TWebBrowser 去访问这个 WebServer 就可以了。类似:http://127.0.0.1:5432/abc.html  ; 这样去访问它。图文混排的网页就出来了。 用这个方法,我已经做了一个东西,放进 APP 里面,在 Windows /iOS / Android 上测试都很好用。 至于这个图文混排,如果要在手机屏幕上显示,网页的排版,直接套用 BootStrap 这个框架就好了。 详细点的介绍看这里: https://blog.csdn.net/pcplayer/article/details/78143618
----------------------------------------------
-
作者:
2018/7/16 9:44:51
3楼:
顶楼上,我现在正好需要这个功能, 楼上能不能把源代码也贴出来,避免我们再次研究耗费时间,谢谢!!
----------------------------------------------
他们总是取笑失败者,以酷似智者;他们也总是为成功者喝采,以取得赏金。
作者:
2018/7/16 11:42:51
4楼:
@pcplayer:我是想用TWebBrowser做一个打开远程服务器上网页的APP。 发现用FMX做APP真不轻松,随便哪个APP,今日头条、新浪财经、新湖南....没有一个好的文本编辑、阅览器? 1、查了下资料,看来在android手机用TWebBrowser是不可能打开mht文档的,mht可将许多网页元素保存在一个文件上,免去了许多麻烦,但只有微软和苹果支持这个技术。 2、10.2.3中的TWebBrowser似乎有技术缺陷,它的内核是webview。打开文字帽问题,但文字中如果有表格则不显示表格,如果网页有图片,图片有时显示有时不显示。 3、按您所说的,把网页和网页图片分别保存在数据库的blob字段内,这个实现起来是很难的:TWebBrowser没有流操作的接口或函数;也不知道将图片如何插入到指定位置?
----------------------------------------------
-
作者:
2018/7/18 10:56:52
5楼:
@mprjcf 源代码我早就放到 CSDN 上去了。我写的博客文章里面有提到源代码放到 CSDN 里面。 @sxqwhxq 你的需求有点奇怪。如果你是看今日头条,那是看,不是编辑。坦白说,手机上编辑图文混排,就算技术上能做出来,用起来也很累。所以微信公众号一开始的文章编辑发布都是在 PC 端的网页里面做,不是在手机里面做。如果在 PC 端网页里面做图文混排的编辑,用 VCL 的 TWebBrowser,这个是包装的 IE 浏览器,功能很强大,10多年前大概是2003年我就拿它做了个图文混排的编辑器了。 至于把内容保存到数据库,这个和 TWebBrowser 有什么关系?我前面已经说得很清楚了,TWebBrowser 只是去访问一个 WEB Server,这个 WEB Server 里面的程序(CGI 程序)去访问数据库。这个 WEB Server 程序,用 Delphi 的 WebBroker 框架来做,很简单的。
----------------------------------------------
-
作者:
2018/7/18 12:15:02
6楼:
楼上很强大,所以很保密,他的 CSDN 不是我们一帮人可以看到的。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/7/18 12:30:53
7楼:
分享5楼的CSDN博客:https://blog.csdn.net/pcplayer
----------------------------------------------
虽千万人吾往矣!
作者:
2018/7/18 13:41:27
8楼:
再分享 5 楼 高手的 资源地址 https://download.csdn.net/user/pcplayer/uploads 我不会用 csdn ,真麻烦。 而且 csdn 太黑心了。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/7/18 15:21:55
9楼:
早关注了博主了,但下载资源好难找到,谢谢!!
----------------------------------------------
他们总是取笑失败者,以酷似智者;他们也总是为成功者喝采,以取得赏金。
作者:
2018/7/18 15:39:03
10楼:
@pcplayer:不好意思,在win中,可以从流中装载网页: var ms: TMemoryStream; begin ms := TMemoryStream.Create; Memo1.Lines.SaveToStream(ms); ms.Position := 0; (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)); ms.Free; end; 但在FMX中,TWebBrowser装载网页好像只有一种方法: WebBrowser1.Navigate(url); 这样,如何从数据库的blob打开一个网页?如何从数据库的blob字段加载一个图片并插入到一个指定位置呢? 请指导下,谢谢。
----------------------------------------------
-
作者:
2018/7/18 15:50:53
11楼:
如果是加载一个 页面,loadstring 就行。 如果是往里头动态添加东西,那就需要你写 js 了。 反正 你是别想用 微软提供的接口了,人家 手机系统 不喜欢你这些接口。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/7/20 11:36:21
12楼:
@sxqwhxq 你用微软提供的接口,是直接用程序往 WebBrowser 里面填内容。 在 FMX 底下: 1. 如果你的 FMX 程序只运行在 PC WINDOWS 里面,你可以用 VCL 的 WebBrowser 仍然采用微软的接口,然后把 VCL 的窗口摆到 FMX 的窗口里面去。也就是融合 VCL 的界面和 FMX 的界面。具体做法,网上有介绍。我自己之前也试过。 2. 如果你是想要在安卓或 iOS 上跑,那自然只能是 WebBrowser1.Navigate(url); 这个 URL 如果是你自己的一个网站,不就可以了么?你自己的网站,数据放在数据库里,网站程序把数据库的内容生成为 HTML 页面发送出去。这个是基本的 WEB 服务器的概念。这个 WEB 服务器,你用 PHP 写也行,你用 ASP.NET 写也行,你用 DELPHI 写,也没问题。 我前面的帖子说的就是用 DELPHI 写,并且把代码和你的 FMX 程序编译到一起。 说穿了,我们的程序都只做了两件事:1. 数据处理;2. 数据传输/通讯。 (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)); 这个方法,是把数据丢给 WebBrowser,算是数据通讯。 WebBroser.Navigate(URL); 这个方法,也是数据通讯,只不过数据传输是通过 TCP/IP 的方式。
----------------------------------------------
-
作者:
2018/7/20 12:01:03
13楼:
@sxqwhxq 我查了一下我自己以前写的用百度地图的 APP 代码,FMX 里面的 WebBrowser 可以直接加载字符串。 WebBrowser1.LoadFromStrings 然后,WebBrowser 可以执行一个外部的 JS 代码: WebBrowser1.EvaluateJavaScript(); 有了这两样东西,你一个图文混排的的网页,是可以直接装进去的。 关键是你要会做一个只包含字符串的图文混排的网页。 什么意思?也就是说,网页里面的图片,不是一个外部文件,而是打包在 html 文件里面的。 如何做?我的博客里有写: https://blog.csdn.net/pcplayer/article/details/69233739
----------------------------------------------
-
作者:
2018/7/20 19:20:53
14楼:
再次测试了一下,直接把图片编码为 BASE64 的字符串插入到 HTML 页面里面的办法,在安卓里面同样可以。
----------------------------------------------
-
作者:
2018/7/20 20:05:15
15楼:
FireMonkey 底下,另外一个办法: 1. 把 HTML 和图片,都放进一个 SQLite 数据库。在 APP 运行时,将数据库里面的多个文件释放出来,保存到 TPath.GetDocumentsPath 目录下。 2. HTML 里面的图片用相对路径:<img src="abc.jpeg"> 3. WebBrowser1.URL := 'file://abc.html'; WebBrowser1.Navigate; 以上方法,我刚刚写了一个测试代码,在 WINDOWS 和安卓下测试通过。iOS 没测。
----------------------------------------------
-
作者:
2018/7/23 12:30:44
16楼:
感谢两位大师指点,我再试试。
----------------------------------------------
-