现在我们拥有允许自定义的第三方JavaScript在AMP页面上运行的<amp-script>
,我试图确定我是否仍然可以访问与现在收集的相同信息非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页面?我在他们的官方文档中查看了这些信息。
由于<amp-script>
由Workerdom提供动力,因此最佳的位置是Workerdom文档。
具体来说,有一个Workerdom兼容性表,您可以在其中查看当前可用的API。
当涉及navigator
对象时,应通过Workernavigator支持。尝试使用self.navigator.userAgent
,这应该起作用。