现在我们有了<amp-script>
,它允许自定义第三方JavaScript在AMP页面上运行,我试图确定我是否仍然可以访问我现在在非AMP页面上收集的相同信息。例如。用户代理。我有以下示例,页面上有以下代码:
<amp-script layout="container" src="/javascripts/alert.js">
Output message: <span id="outputMsg"></span>
</amp-script>
我在检索的JS文件中有以下代码:
const req = new XMLHttpRequest();
console.log('XHR ctor works');
const collectedData = {
userAgent: navigator.userAgent,
};
console.log('user agent accessible')
document.cookie = "key=value";
console.log('cookie set works');
document.getElementById('outputMsg').innerHTML = JSON.stringify(collectedData, null, 4);
console.log('DOM mutation works');
想法是,这将告诉我在<amp-script>
施加的条件下允许运行什么代码。我在控制台中得到以下输出:
Powered by AMP ⚡ HTML – Version 1905021827420 http://localhost:3000/search?searchterm=diamond
/javascripts/alert.js:32 XHR ctor works
/javascripts/alert.js:35 Uncaught ReferenceError: navigator is not defined
at Object.<anonymous> (/javascripts/alert.js:35)
at /javascripts/alert.js:45
所以我可以看到某些事情是允许的,而有些则是不允许的。我能够重新排列该代码,以确定该示例中唯一不允许的事情是访问navigator
对象。
使用<amp-script>
是否允许AMP页面执行白名单?我查看了他们的官方文档,但找不到此信息。
答案 0 :(得分:3)
由于<amp-script>
由WorkerDOM提供支持,因此最好的参考方法是WorkerDOM文档。
具体来说,有一个WorkerDOM compatibility表,您可以在其中查看当前可用的API。
对于navigator
对象,应通过WorkerNavigator支持。尝试改用self.navigator.userAgent
,这样应该可以。