【问题标题】:Script tag in Aurelia view is not executedAurelia 视图中的脚本标签未执行
【发布时间】:2016-07-30 18:54:16
【问题描述】:

我正在向简单的 aurelia 视图添加一个简单的脚本块:

<template>
    <script type="text/javascript">
    alert('Hello!');
    </script>
</template>

脚本永远不会运行,即使视图正确呈现并且我可以看到脚本块确实出现在 DOM 中。

我也尝试过通过 viewModel 动态插入脚本块,并尝试过:

 <script type="text/javascript" src="http://blah"></script>

我知道这样做不是最佳做法,但我正在尝试集成一个第三方小部件,然后该小部件将呈现 iframe。上面显示的警报只是验证我看到的问题的一种简单方法。

现实生活场景如下:

  • 我从我的视图模型向第三方进行了 api 调用。
  • 返回如下:

    &lt;script type='text/javascript' language='JavaScript'src='https://secure.na1.echosign.com/public/embeddedWidget? ` wid=CBFCIBAA3AAABLblqZhBU33GaMRZ2lMelHKzti7RkanxMP5v- uW_f8CEiKoopNNofJWyXhmE56Su3HTbY*&token=CBNCKBAAHBCAABAARNiZ7Yba0h7dnLaQRBAdTdH9UrJZKryP' />

我需要将它附加到 DOM 并让它执行。我正在通过 fetch 调用上面的 url 来解决这个问题,然后我执行响应,但这似乎是一种乏味/hacky 的方式。

【问题讨论】:

    标签: javascript aurelia


    【解决方案1】:

    我建议调整此答案中提供的解决方案:Use JS variable to set the src attribute for <script> tag

    在您的 VM 的 bindattached 方法中(很可能):

    let scriptURL = api.getURL();
    
    let scriptElement = document.createElement('script');
    
    scriptElement.src = scriptURL;
    scriptElement.onload = () => {
        // do anything you need to do here, or call a VM method
        this.someVMMethod();
    };
    
    this.scriptElementInHead = document.querySelector('head').appendChild(scriptElement);
    

    如果需要,您甚至可以通过在 unbinddetached 方法中卸载组件时保留对它的引用并从头元素中删除它来删除脚本元素。

     detached() {
       document.querySelector('head').removeChild(this.scriptElementInHead);
     }
    

    【讨论】:

    • 以上内容确实适用于简单的警报示例,非常感谢 - 我仍然想了解为什么 DOM 中存在的脚本标签没有被执行!但是,当我尝试使用第三方小部件时,它不起作用。我怀疑这个原因是第三方返回的脚本如下: document.write('' );我怀疑这更像是一个一般的 document.write 问题,而不是脚本标签问题。
    • 正如我所怀疑的,我刚刚发现了这个错误:embeddedWidget?wid=CBFrJZ5QxKH5Ybg4ZRieHjGEJ_TbgQ7K...:1Failed to execute 'write' on 'Document': It is not possible to write into a document from异步加载的外部脚本,除非它被显式打开。使用 activate 方法时未显示此错误,但当我将负载附加到按钮时显示此错误。我遇到的问题不是 Aurelia 的问题,更多的是异步加载时第 3 方小部件的实现。我会将您的答案标记为已接受,因为它适用于大多数情况。
    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多