我使用TWebBrowser来显示Google地图.问题是它在加载地图时会阻塞主ui线程.是否可以在单独的线程中更新地图?
编辑: RRUZ你是对的TWebBrowser有URL的异步加载.但是我发现了阻止呼叫的问题:
if WaitWhileProcessing and (MapQueryResult.Count > 0) then
Result := MapQueryResult[0] as TMapQuery;
Run Code Online (Sandbox Code Playgroud)
和方法:
function TMapItemCollection.WaitWhileProcessing: Boolean;
var
vMaxSleepCnt: Integer;
begin
Result := True;
vMaxSleepCnt := 0;
while Processing or Loading do
begin
inc(vMaxSleepCnt);
Application.ProcessMessages;
Sleep(100);
if vMaxSleepCnt = 100 then
begin
Result := False;
Break;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
所以它似乎解决了这个代码应该重构.但这不是这个问题的范围.
我正在浏览一些网页中出现javascript错误.
有没有人知道如何禁用使用TWebbrowser在Delphi应用程序中显示的javascript错误框?或任何其他消息框?
由于TWebbrowser在IE7兼容模式下运行,我遇到了TWebbrowser的Javascript错误.
有没有办法防止这种情况,只是让它在IE9模式下运行?
我在Windows应用程序中托管Internet Explorer.我可以向下滚动到文档的底部.当我然后尝试向上滚动时,我得到除零异常:
当我滚动使用Page Up崩溃似乎发生在呼叫 -IOleInPlaceActiveObject:TranslateAccelerator
当我使用鼠标滚动时,在调用期间发生崩溃
无论哪种方式,崩溃都发生在Internet Explorer中.
Delphi在异常时显示的堆栈跟踪:

与Jedi异常跟踪显示的堆栈跟踪不同:
Exception EZeroDivide in module mshtml.dll at 00378B89.
Floating point division by zero.
Exception raised by object: TEmbeddedWB
Full Exception Details:
EZeroDivide
ExceptionCode: 0xC000008E (EXCEPTION_FLT_DIVIDE_BY_ZERO)
The thread tried to divide a floating-point value by a floating-point divisor of zero.
ExceptionFlags: 0x00000002
ExceptionAddress: 0x574C8B89
Parameters: (0x00000000)
EXCEPTION_RECORD: nil
Message: Floating point division by zero
Stack Trace:
[574C8B89] Unknown function at DllGetClassObject + $FF033
[004CA61E] …Run Code Online (Sandbox Code Playgroud) 我有一个Delphi应用程序,在TWebBrowser控件中显示一组网页.其信息亭类型的应用程序,以便用户触摸上侧的按钮,它示出了在标签的特定网页.我遇到某些网站的一些问题,并获得IE javscript错误.
我想知道是否有一种方法可以在选项卡或Delphi的表单中嵌入chrome或firefox浏览器?
这个问题似乎回答了我遇到javascript错误的问题.
如何从WebBrowser组件获取源代码?
我想在WebBrowser组件上获取活动页面的源代码并将其写入Memo组件.
谢谢.
根据
http://www.rendelmann.info/blog/CommentView,guid,356fbe68-3ed6-4781-90a4-57070a0141da.aspx和http://msdn.microsoft.com/en-us/library/aa770056(v=vs. 85)的.aspx
获得托管web浏览器缩放使用控制键和鼠标滚轮应该只需要调用IWebBrowser2.ExecWB(OLECMDID_OPTICAL_ZOOM, ...)具有pvaIn的价值100,
但调用它后,按ctrl +鼠标滚轮仍然不缩放内容
代码我正在使用Delphi 2007:
const
OLECMDID_OPTICAL_ZOOM = 63;
var
pvaIn, pvaOut: OleVariant;
begin
pvaIn := 100;
pvaOut := NULL;
WebBrowser1.ControlInterface.ExecWB(OLECMDID_OPTICAL_ZOOM,
OLECMDEXECOPT_DONTPROMPTUSER, pvaIn, pvaOut);
end;
Run Code Online (Sandbox Code Playgroud) 我试图在delphi中构建一个允许用户使用谷歌地图的系统.一切正常,但我注意到每次创建一个新的TWebBrowser对象并加载处理谷歌地图的javascript时,会生成许多新的线程.
我的问题是,即使web浏览器被销毁(并且它被明确销毁),创建的线程仍然存在.我正在设计这个程序有很长的运行时间和谷歌地图的打开和关闭发生多次,因此,一段时间后,生成了很多线程,并没有终止该程序显着减慢.
有没有办法自己销毁这些线程,或者我做错了什么导致线程持续存在?
我的程序基于以下代码:
const
HTMLStr: AnsiString =
'<html> '+
'<head> '+
'<meta name="viewport" content="initial-scale=1.0, user-scalable=yes" /> '+
'<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"> </script> '+
'<script type="text/javascript"> '+
''+
''+
' var geocoder; '+
' var map; '+
' var trafficLayer;'+
' var bikeLayer;'+
' var markersArray = [];'+
''+
''+
' function initialize() { '+
' geocoder = new google.maps.Geocoder();'+
' var latlng = new google.maps.LatLng(40.714776,-74.019213); '+
' var myOptions = { '+
' zoom: 13, '+
' center: latlng, '+ …Run Code Online (Sandbox Code Playgroud) 我想在TWebBrowser组件中以格式化的HTML显示rss Feed的输出,如果在TWebbrowser中加载http://code.google.com/feeds/p/v8/svnchanges/basic,则显示content作为XML文件

但如果我使用IE加载相同的页面

我尝试在加载的IHTMLDocument2中注入一个css,正如在这个问题CSS和TWebbrowser delphi中提出的那样,但我仍然得到相同的结果.
问题是,如何在TWebbrowser中加载rss feed但是将输出显示为像IE这样的HTML文档呢?
由于我不时在使用TWebBrowser和TEmbeddedWB时收到"浮点除零"异常,我发现我需要屏蔽除零除异常Set8087CW或SetMXCSR.
Q1:这样做的最佳方法是什么:
OnBeforeNavigate和OnDocumentComplete事件掩盖/取消屏蔽异常?(文档加载后是否有可能发生异常?)Q2:什么是最好的"命令"来屏蔽"除以零"而没有别的 - 如果应用程序是32位,是否需要屏蔽64位异常?
我正在使用它的应用程序,它一直可用于显示电子邮件内容的TWebBrowser控件.
此外,如果有人可以澄清 - 这是来自Microsoft的TWebBrowser控件的特定错误还是Delphi/C++ Builder和Microsoft工具之间的区别?如果我在Visual C++应用程序中托管TWebBrowser会出现如果出现除零错误会发生什么 - 它不会被转换为异常但会发生什么 - 那么Visual C++将如何处理"除以零"异常呢?
有点奇怪的是,微软在很长一段时间内没有注意到这个问题 - 也很奇怪,Embarcardero也没有注意到它.因为有效屏蔽浮点异常也会为此特定目的屏蔽您自己的程序异常.
UPDATE
经过一番检查,我的最终解决方案是
SetExceptionMask(GetExceptionMask() << exZeroDivide);
Run Code Online (Sandbox Code Playgroud)
GetExceptionMask()的默认状态返回:TFPUExceptionMask() << exDenormalized << exUnderflow << exPrecision.很明显,一些例外已被掩盖 - 这只会增加exZeroDivide掩盖的异常.
因此,现在每个除零都会导致浮点数+ INF而不是异常.我可以忍受 - 对于代码的生产版本,我将屏蔽它以避免错误,对于调试版本,它将被解除屏蔽以检测浮点除以零.
delphi ×10
twebbrowser ×10
delphi-2007 ×2
iwebbrowser2 ×2
alerts ×1
c++builder ×1
css ×1
delphi-5 ×1
delphi-7 ×1
delphi-xe2 ×1
exception ×1
google-maps ×1
html ×1
javascript ×1