我需要一种有效的机制来检测DOM的变化.最好是跨浏览器,但如果有任何有效的方法不是跨浏览器,我可以使用故障安全的跨浏览器方法实现这些.
特别是,我需要检测会影响页面上文本的更改,因此需要任何新的,删除或修改的元素或对内部文本(innerHTML)的更改.
我无法控制正在进行的更改(它们可能是由于第三方javascript包含等),因此无法从这个角度进行处理 - 我需要以某种方式"监视"更改.
目前我实施了一个"quick'n'dirty"方法,body.innerHTML.length每隔一段时间检查一次.这当然不会检测导致返回相同长度的变化,但在这种情况下"足够好" - 这种情况发生的可能性非常小,并且在此项目中,未能检测到更改将不会导致丢失的数据.
问题body.innerHTML.length是它很贵.在快速浏览器上可能需要1到5毫秒,这可能会让事情陷入困境 - 我也在处理大量的iframe,而且这些都会增加.我很确定这样做的代价是昂贵的,因为innerHTML文本不是由浏览器静态存储的,并且每次读取时都需要从DOM计算.
我正在寻找的答案类型是从"精确"(例如事件)到"足够好"的任何东西 - 或许像innerHTML.length方法一样"quick'n'dirty",但执行速度更快.
编辑:我还应该指出,虽然检测已经修改过的精确元素会"很好",但这并不是绝对必要的 - 只要有任何改变这一事实就足够了.希望这能够扩大人们的反应.我将调查突变事件,但我仍然需要IE支持的后备,所以任何笨拙的,创造性的,非常方形的想法将是非常受欢迎的.
我真的厌倦了这个问题.谷歌搜索似乎总是建议"删除包的所有bpls","删除所有dcus".有时这只是不行.希望我能在这里得到一些其他的想法.
我有一个内部写的包,几个月前没有问题安装.对源进行了一些更改后,我认为是时候重新编译/重新安装软件包了.现在我得到两个错误,第一个如果我选择"安装"是
模块'dcc100.dll'中地址02422108的访问冲突.读取地址00000000.
...或者,如果我尝试构建/编译包,我得到
[Pascal致命错误] F2084内部错误:LA33
这是我们许多人似乎一次又一次出现的德尔福问题之一.如果我们能够按照"任何一个或这些步骤的组合可能修复它"的方式整理响应,那将会很棒,但是如果你做了所有这些步骤,它将修复它......
目前,我已删除了对此程序包的bpl/dcp文件的所有引用,但仍然得到相同的错误...
使用BDS2006(Delphi)
2008年10月1日更新:我设法解决了这个问题 - 请参阅下面的帖子.由于我不能接受我自己的答案,我不完全确定在这里做什么.显然,对于某些人来说,这些类型的问题经常发生,所以我会暂时保持开放以获得其他建议.然后我想如果有人将所有信息整理成一个超级帖子,我可以接受答案
一个相当全面的网站解释了使用c/c ++编写的dll以及将.h头文件转换为delphi/pascal所涉及的困难和解决方案被发布到我最近的邮件列表中,所以我想我会分享它,并邀请其他人发布其他有用的资源,无论是链接,转换工具还是书籍/纸质标题.
每个答案都有一个资源,所以我们最终将最热门/最好的资源冒充到顶部.
我的猜测是类变量("class var")在存储中是真正的全局变量(即整个应用程序的一个实例).
但我想知道是否是这种情况,或者它们是否是存储中的线程(例如类似于"threadvar") - 每个线程一次实例.
谁知道?
编辑:将"范围"更改为"存储",因为这实际上是正确的术语,以及我所追求的(感谢Barry)
我有一个列表包装器,它维护两个Tstringlists和一个TClassList
我需要这个是线程安全的,这样:
有关如何做到这一点的任何想法?我的直觉告诉我它需要的不仅仅是一个关键部分,可能是一个信号量或"使用计数器",也许其中一个与CS 结合使用.
我只是不太确定从哪里开始 - 从英语到伪代码的整体方法,到delphi实现或外部链接的任何事情都将非常感激.
我正在尝试在我的单元测试中使用以下代码,
/* Test setup code */
_routes = RouteTable.Routes;
MvcApplication.RegisterRoutes(_routes); //set up the routes as they would be in actual application
/* test code */
Expression<Func<SearchController, ActionResult>> actionFunc;
actionFunc = action => action.Results("x", 3, null);
RouteTestingExtensions.Route(
"~/Search/Results?searchText=x"
).ShouldMapTo<SearchController>(actionFunc);
Run Code Online (Sandbox Code Playgroud)
问题是,这是失败的"预期结果是结果?searchText = x"
有没有人有一个解决方案可以让我测试一个URL(带有查询字符串)解析为正确的控制器,动作和参数?
仅供参考,我在Global.asax.cs中没有明确的路由设置,因为默认路由适用于实际的应用程序 - 它只是在此测试中不起作用.
我有一个delphi(Win32)Web应用程序,可以作为CGI应用程序,ISAPI或Apache DLL运行.我希望能够生成一个唯一的文件名前缀(在给定时刻对所有当前请求都是唯一的),并认为执行此操作的最佳方法是使用processID(处理CGI模式)以及threadID(处理dll模式).
如何在Delphi中获得唯一的进程ID和线程ID?
这些在多核/多处理器情况下(在单个Web服务器机器上)是否是唯一的?
编辑:请注意我被建议不要使用此方法,因此接受的答案使用不同的方法来生成临时文件名
我有一个方法,它构造一个对象,调用一个Execute方法,并释放该对象.对象的类型由传递给方法的TClass后代确定.注意这是我正在谈论的Delphi for Win32,而不是.NET.
编辑:我应该指出这是Delphi 2006,因为在下面的答案中已经注意到,在将来的版本中可能不需要NewInstance调用.但就我而言,这是必需的.因此,我会想象我的问题的答案(它是否安全?并且CreateForm()是否有潜在的泄漏)需要在此基础上回答这是Delphi 2006
编辑#2:似乎为D2007和D2009提供的解决方案确实适用于D2006.我必须从早期版本的Delphi中获得"NewInstance"的习惯......
function TPageClassFactory.TryExecute(ScrnClass: TCustomPageClass): boolean;
//TCustomPageClass = class of TCustomPage
var
ScrnObj: TCustomPage; //TCustomPage defines an abstract Execute() method
begin
Result := FALSE; //default
ScrnObj := TCustomPage(ScrnClass.NewInstance); //instantiate
try
ScrnObj.Create(Self); //NB: Create() and Execute() are *virtual* methods
ScrnObj.Execute;
finally
FreeAndNil(ScrnObj);
end;
Result := TRUE;
end;
Run Code Online (Sandbox Code Playgroud)
我想知道的是这是否安全 - 如果Create()引发异常,会发生什么?
从Forms.pas.TApplication.CreateForm()看一个类似的例子,对异常处理采取了不同的方法(我已经删除了下面不相关的位):
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
var
Instance: TComponent;
begin
Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance;
try
Instance.Create(Self);
except
TComponent(Reference) := nil;
raise;
end;
end;
Run Code Online (Sandbox Code Playgroud)
在Forms.pas方法中,这是否意味着在Create()方法中发生异常时内存泄漏?我的理解是InstanceClass.NewInstance分配了内存,因此在这种情况下内存没有被释放/释放/释放?
我正在寻找一个可以读写JPEG图像元数据的库.例如,如果我想嵌入并回读与jpeg图像相关的简短描述或故事,在图像文件本身中,您会推荐哪些开发库?
我对于什么语言(这是一个新项目)并不太感兴趣,尽管我已经为我熟悉的语言标记了这个问题(但我也会考虑其他语言).最好是相对跨平台的东西(mac/linux/win),比如Java,FreePascal/Lazarus,C++,Objective-C等(老实说我不熟悉跨平台,所以不知道是否是C#是一种可能性 - 除了Java或.NET等更受欢迎的产品之外,最好不要求安装任何特定的框架.