url 包含“&”不适用于 google pagespeed api

url containing "&" does not work with google pagespeed api

我正在使用 Google pagespeed API 来测试我网站的 urls。只要 url 结构不包含任何“&”(查询字符串参数),它就可以正常工作。

示例(有效)

  1. http://www.example.com
  2. http://www.example.com/?id=1234

但是当我改变 url 这样的东西时,它不会显示正确的结果

不起作用的示例

1) http://www.example.com/?id=1234&sub=890

Api 忽略“&sub=890”部分和 returns http://www.example.com/?id=1234

的结果

正在查看APIJavascript代码:

 function runPagespeed() {        
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        var query = [
            'url=' + URL_TO_GET_RESULTS_FOR,
            'strategy=' + strategy,
            'callback=runPagespeedCallbacks',
            'key=' + API_KEY,
        ].join('&');
        s.src = API_URL + query;
        document.head.insertBefore(s, null);
    }

所以看看这个函数,它表明 API 会将 "sub=890" 视为它自己的参数,因此它会忽略它。

当我在 https://developers.google.com/speed/pagespeed/insights/ 上使用 url http://www.example.com/?id=1234&sub=890 时,它工作正常并显示结果

注意:我正在使用 pagespeed 示例代码进行测试,它是 https://developers.google.com/speed/docs/insights/v2/first-app

任何帮助将不胜感激

您需要使用 encodeURIComponent 对 URI 进行编码,以便将参数视为输入。尝试以下

function runPagespeed() {        
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        var query = [
            'url=' + encodeURIComponent(URL_TO_GET_RESULTS_FOR),
            'strategy=' + strategy,
            'callback=runPagespeedCallbacks',
            'key=' + API_KEY,
        ].join('&');
        s.src = API_URL + query;
        document.head.insertBefore(s, null);
    }