piffy
1
Ebay 联盟计划提供了一个在客户端转换链接的脚本。这是一个简单的两行代码:
<script>window._epn = {campaign: [XXX_ID_XXX], smartPopover:false};</script>
<script src="https://epnt.ebay.com/static/epn-smart-tools.js"></script>
我意识到出于安全原因,我不能简单地添加这两行。这里有一个讨论 EPN Smart Links
我创建了一个非常简单的 theme component,并将代码放在了 common/head_tag.html 文件中:
ID 在组件页面上指定,并且控制台会记录正确的 ID。但是,它似乎没有更新任何 URL。
我已经将此 epn-smart-tools.js 添加为内容安全策略的例外。但是,在浏览器控制台中,我收到了这个警告:

看起来 epn-smart-tools.js 中引用的这个 “from-url.js.map” 是问题所在。我在桌面上编写了一个简单的 HTML 文件并在本地运行,似乎没有问题——这让我相信问题更可能出在 discourse 端,而不是我的浏览器。
这些 source map 的作用以及 discourse 如何与它们交互超出了我的知识范围。有什么建议吗?我是否忽略了什么?
Falco
(Falco)
2
Source maps 是可选文件,有助于调试压缩后的资源。由于您不控制此资源,并且无法控制其来源,因此应忽略此警告。
2 个赞
piffy
3
感谢 @Falco 提供的信息,生日快乐。
我发现问题出在我添加该 <script src="... 行的位置。
这对我有用:
<script type="text/discourse-plugin" version="0.8">
console.log(settings.epn_id);
window._epn = {campaign: settings.epn_id, smartPopover:false};
var script = document.createElement('script');
script.src = 'https://epnt.ebay.com/static/epn-smart-tools.js';
var head = document.getElementsByTagName("head")[0];
head.appendChild(script);
</script>
我遇到的下一个问题是动态加载的元素没有应用脚本。例如,如果我刷新主题页面,加载的帖子会显示联盟链接,但滚动加载更多帖子时——那些帖子则不会。
有没有办法在每次加载新元素时运行脚本?
1 个赞
Falco
(Falco)
4
理想情况下,您应该在保存新帖子后在服务器端执行此操作。我们有一个插件可以为 Amazon 执行此操作,因此您应该能够将其改编为 eBay:GitHub - discourse/discourse-affiliate
如果您仍然想在客户端执行此操作,可以遵循这个有用的教程:Link rewriting for affiliate codes - #8 by Johani