【问题标题】:Delphi, EmbeddedWB/TWebbrowser - jQuery not executingDelphi、EmbeddedWB/TWebbrowser - jQuery 未执行
【发布时间】:2011-07-25 23:31:59
【问题描述】:

我正在使用 EmbeddedWB(TWebbrowser 扩展)来做一些动态生成内容的“实时预览”。

我正在尝试将 jQuery 添加到组合中,所以我可以得到一些花哨的效果,但是由于 IE9 总是为每个该死的页面询问“允许阻止的内容”,因此肯定是动态生成的 (Webbrowser.LoadFromString)不会被允许玩得开心。简而言之:它不允许执行 Javascript。

我尝试将 SecurityManager 添加到我的 TEmbeddedWB 中,但也没有这样做。我在 Firefox 和 IE9 中测试了我的动态代码,它可以工作(当然,在 IE9 中我必须先允许,这就是我发现这是一个安全问题的原因)。

有没有一种轻松的方法来解决这个问题,而无需手动进入 IE 并进行一些调整?还是我对问题的原因完全错误?

编辑:在尝试this article's method 之后,IE 不再询问它是否应该允许任何东西,但是我的脚本仍然没有在我的 TembeddedWB/TWebbrowser 中执行..

编辑 2:好的,通过删除 jQuery 代码并显示一个普通的警报,我不得不得出结论,现在正在执行 JS,但 jQuery 不是。

编辑 3:这是我的应用程序生成的(精简的)HTML 代码,其中 jQuery 在我的 EmbeddedWB/TWebbrowser 控件中不起作用 - 但是,它可以工作在 Internet Explorer 9 本身中:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=9" />
    <script type="text/javascript" src="file://C:\jQuery.js"></script>
</head>
<body>
    <center>
    <p>
      Some stuff here!
    </p>
    </center>

    <script type="text/javascript" language="javascript">
    $(document).ready(function(){
            alert('I Am jQuery!!!!');
    });
    </script>
</body>
</html>

EDIT4:我也尝试将src 切换到Google 托管的jQuery,但也没有成功。删除 Metatag 也没有修复它。在你浪费时间建议之前让你知道我尝试过的东西:)

EDIT5:通过导航到使用 jQuery (Webbrowser.Navigate) 的站点,该站点按预期工作。但是,当从我的本地 test.html 或通过 .LoadFromString(); 执行此操作时,它将无法正常工作。

不起作用 = jQuery 代码未执行。

【问题讨论】:

  • 需要魔法元标签吗?
  • @mjn - 是的,强制 Webbrowser 进入 IE9 模式,启用 CSS3 功能。
  • @mjn - 删除它并不能解决任何问题

标签: javascript jquery delphi internet-explorer twebbrowser


【解决方案1】:

如果您为 jquery.js 文件使用正确的 URL,它似乎可以工作:

<script type="text/javascript" src="file://C:/jQuery.js"></script>
<script type="text/javascript" src="file:///jQuery.js"></script>

或者相对路径,也可以省略file://协议:

<script type="text/javascript" src="../../jQuery.js"></script>

当您从文件加载 HTML 时,上述方法有效。然而,问题是,如果内存中的内容和文件系统中的 javascript 不被视为跨越安全上下文边界并因此被嵌入式浏览器拒绝。在这种情况下,直接在 HTML 内容中嵌入 jquery(使用&lt;script&gt; 标签)应该可以工作。

【讨论】:

  • Arent 文件位置通常带有 \'s?现在就试试!
  • 这是我的 Script 标签(必须使用 File://,因为加载到 Webbrowser 中的 HTML 不是文件,而是字符串):
  • 我尝试使用 /'s 而不是 \'s,但也没有显示警报。
  • 是的,如果您直接从内存中加载 HTML,我相信您必须使用完整的 file:// 规范。该 URL 可能应该被正确编码,但是:.../My%20Dropbox/...(可能不是,但尝试一下)。那么它现在有效吗?
  • 还有一个问题是,如果内存中的内容和文件系统中的 js 不被视为跨越安全上下文边界并因此被嵌入式浏览器拒绝。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
相关资源
最近更新 更多