内容未在Durandal中加载的第三方脚本

时间:2015-02-16 10:54:25

标签: jquery knockout.js single-page-application durandal-2.0

我的问题与发布here的问题几乎相似。我正在从包含第三方脚本的数据库加载HTML内容。我发现Durandal没有加载该脚本,或者视图不会组成该元素。我的html内容(来自第三方)看起来:

<p id="oilChart"><script src="http://www.oil-price.net/TABLE2/gen.php?lang=en" type="text/javascript">
</script>
<noscript> &amp;amp;amp;amp;lt;a href="http://www.oil-  price.net/dashboard.php?lang=en#TABLE2" mce_href="http://www.oil-price.net/dashboard.php?lang=en#TABLE2"&amp;amp;amp;amp;gt;To get the oil price, please enable Javascript.&amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br     /&amp;amp;amp;amp;gt; </noscript>
</p>

我在main.js中引用了所有其他脚本。我试图以这种方式引用它,然后使用durandal的 compositionComplete 来链接我在内容中指定的id。那没起效。有没有另一种方式来看待它并做到这一点。谢谢你提前帮忙。

4 个答案:

答案 0 :(得分:2)

正如您所指出的,杜兰达将忽略视图中的script标记。它们仅从 index.html (或其等效物)加载。

您是否能够提前引用脚本(和noscript),将它们放在 index.html 文件中?换句话说,他们有动态加载吗?

旁注:你是什么意思&#34;所有我的其他脚本都在main.js中被引用&#34;?你的意思是它们是RequireJS的路径配置吗?或者您的意思是说它们是在 index.html 文件(或其等价物)中引用的?

答案 1 :(得分:1)

我进一步调查了OP提出的问题的答案。

我采取了以下步骤:

  • 遵循Erikas Pliauksta's建议并创建了自定义KO绑定。
  • 稍微修改绑定以获取布尔标志:false禁用绑定,true启用绑定。这允许我使用compositionComplete
  • 计算HTML的呈现时间

这是我在控制台中获得的屏幕截图:

enter image description here

现在,对SO的搜索产生了这个post。基本上,如果此脚本使用document.write或其等效脚本,则无法正常工作。

我会回到我最初的建议,即点击网络服务以显示原油数据,而不是试图合并第三方JavaScript,就像他们所说的那样。

答案 2 :(得分:0)

您可以使用knockout custom bindings

ko.bindingHandlers.oilPrice = {
  update: function( element, valueAccessor, allBindingsAccessor, viewModel, bindingContext){
  $(element).html('<script src="http://www.oil-price.net/TABLE2/gen.php?lang=en" type="text/javascript"></script><noscript> &amp;amp;amp;amp;lt;a href="http://www.oil-  price.net/dashboard.php?lang=en#TABLE2" mce_href="http://www.oil-price.net/dashboard.php?lang=en#TABLE2"&amp;amp;amp;amp;gt;To get the oil price, please enable Javascript.&amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br     /&amp;amp;amp;amp;gt; </noscript>');
  }
};

在你的html中使用它:

<p><span data-bind="oilPrice"></span>

<强>更新 如果你使用knockout 2.2自定义绑定必须包含值:

<p><span data-bind="oilPrice:'value'"></span>

for knockout version 3.2:

<p><span data-bind="oilPrice"></span>

你的脚本呈现:

enter image description here

答案 3 :(得分:0)

经过大量研究后,我终于找到了答案。我所要做的就是使用加载我脚本的iframe。我取代了这个:

<p id="oilChart"><script src="http://www.oil-price.net/TABLE2/gen.php?lang=en" type="text/javascript"></script></p>

使用:

<iframe style ="border: none;height: 235px" srcdoc="<html lang='en'><body><script src='http://www.oil-price.net/TABLE2/gen.php?lang=en'></script></body></html>"><iframe>

感谢所有想法。了解了很多 - 从使用异步插件到自定义Ko处理程序的可能性。