我需要在 Eclipse Scout 中动态加载 javascript 的帮助。
所以我已经有一个从index.ts 调用的javascript,将脚本和CSP 的元标记放在head 部分中。有很多例子可以说明如何做到这一点。
我的问题是“不安全”通常用于本地项目等,但就我而言并非如此。即使我使用的示例没有“不安全”,例如
const meta = document.createElement('meta');
meta.httpEquiv = "Content-Security-Policy";
meta.content = "script-src 'self' /myDirectory/myFile.js;"
document.head.appendChild(meta);
它根本不适用于我的域。相对路径肯定是正确的,因为如果我写 ./ 作为相对路径,例如,我会被告知脚本找不到或者是无效的源。
并且meta标签以及script标签也被插入到head区域中,只不过由于CSP错误而没有加载脚本。
我的错误消息如下所示:“拒绝加载脚本 '',因为它违反了以下内容安全策略指令:“script-src 'self'”。请注意,未显式设置 'script-src-elem',因此'script-src' 用作后备。”
我也考虑过允许 Eclipse Scout 的脚本,不幸的是我还没有找到一种方法来做到这一点(如果可能的话)。
原则上,我也会假设插入脚本标签、CSP 元标签和加载脚本之间的时间间隔不合适,但由于我在这方面不是特别有经验,所以我不能对此多说。
script-src 'self'
表示仅允许加载来自与 html 页面相同域的脚本。由于这是 Scout 应用程序的默认设置,我认为您不需要调整 CSP 规则。
如何准确加载脚本?您可以使用
$.injectScript(url)
动态加载脚本。
我会检查以下内容:
scout.cspDirective
来调整 html 页面的 CSP 规则。示例:scout.cspDirective[script-src]='self' https://script-domain.com
但实际上我认为问题出在登录上。 目前我已经解决了在基本URL中使用完整路径加载的问题,但是在登录页面中加载不起作用。这可能是因为登录页面是一个子域,这就是为什么我无法加载脚本,但我不确定这一点。目前我使用的代码:
const script = document.createElement(‘script’);
script.src = ‘https://baseUrl/myDirectory/myFile.js’;
document.head.appendChild(script);
上面显示的 CSP 代码仅具有完整路径。 在本地,登录和应用程序之间存在区别,但在“公共”域中,我直接进入登录页面,尽管在 URL 中指定了基本 URL,并且通常首先寻址基本 URL。这就是为什么我是否在登录名和基本 URL 中加载脚本或仅在基本 URL 中加载脚本并不重要,但即使我想在index.ts和login.ts中加载脚本,它也不会工作。 这是我收到的当前错误:
“拒绝加载脚本 '',因为它违反了以下内容安全策略指令:“script-src 'self'”。请注意,未显式设置 'script-src-elem',因此使用 'script-src'作为后备。”
“拒绝加载脚本'http://baseUrl/login',因为它违反了以下内容安全策略指令:“script-src 'self'”。请注意,'script-src-elem'未明确设置,因此'script-src' 用作后备。”