动态更改WebBrowser数据流内容
动态更改WebBrowser数据流内容
具体执行方法如下(需要 uses mshtml,activex):
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
ms: TMemoryStream;
StrStream:TStringStream;
begin
//先读取到流中,暂存于memo1
if not Assigned(embeddedwb1.Document) then Exit;
ms := TMemoryStream.Create;
(embeddedwb1.Document as IPersistStreamInit).Save(TStreamAdapter.Create(ms), True);
ms.Position := 0;
Memo1.Lines.LoadFromStream(ms);
ms.Free;
//再从流中取出数据输出
s := memo1.text;
//执行替换部分代码
s:=StringReplace(s,'_blank','_self',[rfReplaceAll,rfIgnoreCase]);
StrStream:=TStringStream.Create(s);
try
StrStream.Position:=0;
(embeddedwb1.Document as IPersistStreamInit).Load(TStreamadapter.Create(StrStream));
finally
StrStream.Free;
end;
end;
通过以上转换,可以实现无损式的动态修改网页源码,保证css格式。
但存在一个问题,比如原始的网页的uri为 http://www.piaoyi.org,经过上面的数据流处理后,网页的url变成了 about:blank ,这就使得网页里采用相对路径的文件,如 images/piaoyi.gif 的路径发生了错误,即变成了 about:blankimages/piaoyi.gif ,明显这是路径错误。解决的方法,就是替换所有相对路径为绝对路径。方法就是再html代码前加上这么一句:<base href="http://www.piaoyi.org">
另外,还有一种方法可以动态的写入源码到 webbrowser 或 embeddedwb 里,如下:
procedure TForm11.Button1Click(Sender: TObject);
var
v:OleVariant;
HTMLDocument:ihtmldocument2;
begin
HTMLDocument := EmbeddedWB1.Document as IHTMLDocument2;
v := VarArrayCreate([0, 0], varVariant);
v[0] := '这里写入html代码';
HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
HTMLDocument.Close;
end;
动态更改WebBrowser数据流内容的更多相关文章
- js简单显示和隐藏div,触发超链接,动态更改button值,setInterval()简单使用,jquery easyui弹出框简单使用 .
js简单显示和隐藏div .<!DOCTYPE html> .<html> .<head> .<meta charset="UTF-8"& ...
- 更改WebBrowser控件的用户代理
我试图在Winforms应用程序中更改WebBrowser控件的UserAgent. 我已成功使用以下代码实现此目的: [DllImport("urlmon.dll", CharS ...
- c# 如何更改 WebBrowser所加载的 HTML元素(隐藏滚动条),并按照修改后的来呈现
如何更改 WebBrowser所加载的 HTML元素 方法1:在网页加载完毕后的事件里面添加代码,我这里只是修改网页不出现滚动条,因为滚动条我重写了. #region (private) 网页加载完成 ...
- Flutter学习(8)——CheckBox多选框使用及动态更改多选框数据
原文地址:Flutter学习(8)--CheckBox多选框使用及动态更改多选框数据 | Stars-One的杂货小窝 最近项目需求需要调整页面,记录一下实现过程 这次主要是要实现个评价页面,选择不同 ...
- delphi 动态更改屏幕分辨率(转)
一.如何动态更改屏幕分辨率 有许多小工具可以在不重新启动Windows的条件下,动态更改屏幕分辨率.你是不是也想自己动手做一个呢?请在interface段中加入下面一句 function Resolu ...
- “Word自动更改后的内容保存到通用文档模板上。是否加载该模板?“的解决办法
在win7系统下,Word2010出现了不能正常关闭.打开一个已有word文档,点击右上角关闭按钮后,先提示"word已停止工作,windows正在检查该问题的解决方案",随后提示 ...
- Android应用中动态更改主题的实现
在android应用程序中我们可能需要切换模式,如晚上切换到夜间模式便于阅读等.本文参考了网上的一些资料,并结合实例,实现了动态更改主题的效果. Android中实现theme主题可以使用在activ ...
- adb怎么判断是否有root权限,并更改system/app内容
一.首先判断root权限: adb root 结果: C:\signapp>adb root restarting adbd as root # 说明有root权限 ,若是adbd cannot ...
- WPF 动态更改启动窗体startupUri
原文:WPF 动态更改启动窗体startupUri 第一步: 在 App.xaml 里,把 StartupUri=""去掉,改成 Startup="Applicatio ...
随机推荐
- Geek们为什么都用Linux?《完全使用Linux工作-王垠》读后记
真正开始使用Linux是从2013年某月看到王垠写的一篇<完全用Linux工作>,当时属于无比崇拜王垠的阶段,虽然在那之前常年都在电脑上装着双系统(linux,win),但linux也只能 ...
- hdu6070 Dirt Ratio 二分+线段树
/** 题目:hdu6070 Dirt Ratio 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6070 题意:给定n个数,求1.0*x/y最小是多少.x ...
- tf命令总结
$/AutoBuild/WpfApp/WpfApp/MainWindow.xaml 发现tf workspaces /collection:http://192.168.175.117:8080/tf ...
- js定时器(执行一次、重复执行)
代码如下: <script> //定时器 异步运行 function hello(){ alert("hello"); } //使用方法名字执行方法 var t1 = ...
- 阐述二维码的原理以及使用google api和PHP QR Code来生成二维码
一.什么是二维码:二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的.在许多种类的二维条码中,常用的码 ...
- Java将视频转为缩略图--ffmpeg
Java生成视频缩略图 对于上传视频生成缩略图使用的是ffmpeg进行生成的. 自己在网上找了如何进行编译ffmpeg的方法 但是感觉太复杂了 就到csdn上找到了编译好的ffmpeg文件 体会到ff ...
- 分享一个Unity3D小作品,源码地址已公布在文章开头!
Update:回复量有点大,楼主工作期间可能无暇向童鞋们发送源码,为了不让童鞋们久等,现公布源码地址. 链接: http://pan.baidu.com/s/1sjpYW4d 密码: zhp9 请注 ...
- webpack文档翻译
https://segmentfault.com/a/1190000007568507
- Echoprint系列--编译
近期要做一个音乐相关的client.当中一个功能是音乐识别.搜索了一些资料选择Echoprint来开发.Echoprint是开源免费的,并且多种client都支持能节约非常多时间,今天主要下载和编译源 ...
- nodepad++ 快捷键加常用操作
常用快捷键 新建文件 Ctrl+N 打开文件 Ctrl+O 保存文件 Ctrl+S 另存为 Ctrl+Alt+S 全部保存 Ctrl+Shift+S 关闭当前文件 Ctrl+W 打印文件 Ctrl+P ...