如何确定脚本运行在哪个页面

5

当我的应用程序安装后,我通过Shopify API创建一个脚本标签。我只对在产品展示页面上运行此脚本感兴趣。有没有可靠的方法可以检查脚本是否由产品展示页面运行?我应该要求商家手动在他们的Liquid文件中添加一些内容吗?

4个回答

5

这应该可以在你的JavaScript中工作:

// If we are on a product page
if (window.location.pathname.indexOf('/products/') !== -1) {
 // What's the product handle?
 var productHandle = pathname.match(/\/products\/([a-z0-9\-]+)/)[1];
}

2
对于这个具体问题:
  • 我应该要求商家手动将某些内容添加到他们的液态文件中吗? 我的回答是:
  • 请你,我请求你:不要这样做。尽可能地,不要向主题文件中添加任何无法在以后删除的内容,并且不要(更不要)要求客户编辑他们的主题。
- Caroline Schnapp

0
Shopify的产品页面上始终有一个包含表单的部分,以便将产品添加到购物车中。因此,您可以执行以下操作(假设已存在jQuery):
jQuery("form[action='/cart/add']").each(function() {
  console.log("I'm in ur product page");
});

-1

您可以传递一个额外的函数参数,指定函数从哪里调用。我在几个项目中使用了这种编程方式,并取得了巨大的成功。例如:

function foo(data, moarData, caller) {
  if(caller != 'productPage') { return false; }
  ...
}

而且您可以在产品视图页面上从函数调用中指定调用方变量:

var page = 'productPage';
foo('sharks', 'games', this.page);

谢谢。我不确定我理解了。当我创建一个脚本标签时,我会给它一个URL,在商店渲染页面时调用该URL。我无法控制URL将接收什么参数。你能澄清一下吗? - akonsu
啊,我现在明白你的意思了。但是,是的,你确实对此有一定的控制权。你可以使用<script src="x.js" />,然后紧接着放置<script type="text/javascript"> foo('productPage'); </script>。如果你对调用该函数的位置有控制权,则绝对可以控制发送额外值。 - L0j1k
当我安装一个脚本标签时,我的URL会从商店的每个页面调用。他们传递给URL的唯一参数是商店的名称。要像您建议的那样进行调用,我需要要求商店所有者将此脚本输入页面中。换句话说,所有者需要修改产品视图的商店模板文件。我试图避免这种情况。如果可能的话,我想能够检查DOM以确定我在哪个页面上。 - akonsu

-1
编写一些通用的Javascript代码来查询浏览器中的当前URL。您可以轻松地确定您是否在页面、产品或集合上。尝试使用简单的RegExp来实现这一点。由于Shopify是托管的,因此对于商店来说,弄乱URL结构将非常困难。

这是一个好建议,谢谢。您的意思是即使商店使用自定义域名,URL路径也保持不变吗?我还需要知道当前页面上显示的产品ID。您会如何获取它? - akonsu
使用相同的技术,您可以从URL中解析产品的句柄。通过这样做,您的代码可以使用Ajax API请求产品,并获得ID。当然,使用通用JavaScript完全可以实现,但也很笨拙,因为您不应该已经在手上拿到产品后还需要向服务器请求它。不幸的是,要获取ID并不简单,除非脚本使用Liquid来提取产品的JSON。也许您可以在注入的脚本中完成这个操作。var product = {{product | json }}; var id = product.id - David Lazar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接