小编Gra*_*aza的帖子

最有效的检测/监控DOM变化的方法?

我需要一种有效的机制来检测DOM的变化.最好是跨浏览器,但如果有任何有效的方法不是跨浏览器,我可以使用故障安全的跨浏览器方法实现这些.

特别是,我需要检测会影响页面上文本的更改,因此需要任何新的,删除或修改的元素或对内部文本(innerHTML)的更改.

我无法控制正在进行的更改(它们可能是由于第三方javascript包含等),因此无法从这个角度进行处理 - 我需要以某种方式"监视"更改.

目前我实施了一个"quick'n'dirty"方法,body.innerHTML.length每隔一段时间检查一次.这当然不会检测导致返回相同长度的变化,但在这种情况下"足够好" - 这种情况发生的可能性非常小,并且在此项目中,未能检测到更改将不会导致丢失的数据.

问题body.innerHTML.length是它很贵.在快速浏览器上可能需要1到5毫秒,这可能会让事情陷入困境 - 我也在处理大量的iframe,而且这些都会增加.我很确定这样做的代价是昂贵的,因为innerHTML文本不是由浏览器静态存储的,并且每次读取时都需要从DOM计算.

我正在寻找的答案类型是从"精确"(例如事件)到"足够好"的任何东西 - 或许像innerHTML.length方法一样"quick'n'dirty",但执行速度更快.

编辑:我还应该指出,虽然检测已经修改过的精确元素会"很好",但这并不是绝对必要的 - 只要有任何改变这一事实就足够了.希望这能够扩大人们的反应.我将调查突变事件,但我仍然需要IE支持的后备,所以任何笨拙的,创造性的,非常方形的想法将是非常受欢迎的.

javascript dom mutation-observers mutation-events

46
推荐指数
3
解决办法
5万
查看次数

如何解决Delphi的[Pascal致命错误] F2084内部错误:LA33?

我真的厌倦了这个问题.谷歌搜索似乎总是建议"删除包的所有bpls","删除所有dcus".有时这只是不行.希望我能在这里得到一些其他的想法.

我有一个内部写的包,几个月前没有问题安装.对源进行了一些更改后,我认为是时候重新编译/重新安装软件包了.现在我得到两个错误,第一个如果我选择"安装"是

模块'dcc100.dll'中地址02422108的访问冲突.读取地址00000000.

...或者,如果我尝试构建/编译包,我得到

[Pascal致命错误] F2084内部错误:LA33

这是我们许多人似乎一次又一次出现的德尔福问题之一.如果我们能够按照"任何一个或这些步骤的组合可能修复它"的方式整理响应,那将会很棒,但是如果你做了所有这些步骤,它将修复它......

目前,我已删除了对此程序包的bpl/dcp文件的所有引用,但仍然得到相同的错误...

使用BDS2006(Delphi)

2008年10月1日更新:我设法解决了这个问题 - 请参阅下面的帖子.由于我不能接受我自己的答案,我不完全确定在这里做什么.显然,对于某些人来说,这些类型的问题经常发生,所以我会暂时保持开放以获得其他建议.然后我想如果有人将所有信息整理成一个超级帖子,我可以接受答案

delphi install packages

18
推荐指数
2
解决办法
2万
查看次数

将C/C++ DLL头转换为Delphi的最佳资源?

一个相当全面的网站解释了使用c/c ++编写的dll以及将.h头文件转换为delphi/pascal所涉及的困难和解决方案被发布到我最近的邮件列表中,所以我想我会分享它,并邀请其他人发布其他有用的资源,无论是链接,转换工具还是书籍/纸质标题.

每个答案都有一个资源,所以我们最终将最热门/最好的资源冒充到顶部.

c c++ delphi dll header

14
推荐指数
2
解决办法
1万
查看次数

Delphi类变量是否具有全局或线程本地存储?

我的猜测是类变量("class var")在存储中是真正的全局变量(即整个应用程序的一个实例).

但我想知道是否是这种情况,或者它们是否是存储中的线程(例如类似于"threadvar") - 每个线程一次实例.

谁知道?

编辑:将"范围"更改为"存储",因为这实际上是正确的术语,以及我所追求的(感谢Barry)

delphi multithreading

7
推荐指数
2
解决办法
1808
查看次数

如何在Delphi中实现线程安全的列表包装?

我有一个列表包装器,它维护两个Tstringlists和一个TClassList

我需要这个是线程安全的,这样:

  • 不允许并发写入(应输入某种等待状态)
  • 不允许在写入时读取(反之亦然)(应输入某种等待状态)
  • 并发读取允许

有关如何做到这一点的任何想法?我的直觉告诉我它需要的不仅仅是一个关键部分,可能是一个信号量或"使用计数器",也许其中一个与CS 结合使用.

我只是不太确定从哪里开始 - 从英语到伪代码的整体方法,到delphi实现或外部链接的任何事情都将非常感激.

delphi multithreading semaphore critical-section

6
推荐指数
2
解决办法
2872
查看次数

如何使用查询字符串测试URL的路由/操作解析?

我正在尝试在我的单元测试中使用以下代码,

/* 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中没有明确的路由设置,因为默认路由适用于实际的应用程序 - 它只是在此测试中不起作用.

c# asp.net-mvc mvccontrib-testhelper

6
推荐指数
1
解决办法
1841
查看次数

我可以根据ProcessID和ThreadID创建唯一的文件名吗?

我有一个delphi(Win32)Web应用程序,可以作为CGI应用程序,ISAPI或Apache DLL运行.我希望能够生成一个唯一的文件名前缀(在给定时刻对所有当前请求都是唯一的),并认为执行此操作的最佳方法是使用processID(处理CGI模式)以及threadID(处理dll模式).

如何在Delphi中获得唯一的进程ID和线程ID?

这些在多核/多处理器情况下(在单个Web服务器机器上)是否是唯一的?

编辑:请注意我被建议不要使用此方法,因此接受的答案使用不同的方法来生成临时文件名

delphi multithreading cgi isapi

3
推荐指数
2
解决办法
2944
查看次数

从类引用构造对象

我有一个方法,它构造一个对象,调用一个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分配了内存,因此在这种情况下内存没有被释放/释放/释放?

delphi oop design-patterns

3
推荐指数
1
解决办法
1197
查看次数

什么是操作JPEG元数据的最佳库?

我正在寻找一个可以读写JPEG图像元数据的库.例如,如果我想嵌入并回读与jpeg图像相关的简短描述或故事,在图像文件本身中,您会推荐哪些开发库?

我对于什么语言(这是一个新项目)并不太感兴趣,尽管我已经为我熟悉的语言标记了这个问题(但我也会考虑其他语言).最好是相对跨平台的东西(mac/linux/win),比如Java,FreePascal/Lazarus,C++,Objective-C等(老实说我不熟悉跨平台,所以不知道是否是C#是一种可能性 - 除了Java或.NET等更受欢迎的产品之外,最好不要求安装任何特定的框架.

java jpeg cross-platform metadata freepascal

3
推荐指数
1
解决办法
3652
查看次数