书签问题

Bookmarklet issue

我正在尝试获取此小书签 运行,但出现此错误(在 Chrome 中):

Uncaught SyntaxError: Unexpected identifier

我不明白 href 中的 JavaScript 代码有什么问题。我不能把它放在一个单独的文件中;我需要在 href.

中得到这个 运行

    <a href="javascript:(function(){
      if (!($ = window.jQuery)) { 
        script = document.createElement( 'script' );
        script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'; 
        script.onload=releasetheScript;
        document.body.appendChild(script);
      } 
      else {
        releasetheScript();
      }
    
      function releasetheScript() {
        
        regex = ['ceo', 'fondateur', 'cofondateur', 'cto', 'cfo', 'daf', 'startup', 'entrepreneur', 'office manager', 'fintech', 'freelance', 'tech', 'founder', 'neobanque', 'banking', 'comptable', 'incubateur', 'coworking', 'PME', 'VC', 'accélérateur']
        banned = ['|(?!', 'sex', 'porn']
        target = regex.join('|') + banned.join('|') + ')';
        interval = 10000
        a = setInterval(function () {
          window.scrollTo(0,document.body.scrollHeight);
          var fields = $('.ProfileCard-userFields');
          for (var i = 0; i < fields.length; i++) {
            var p = fields[i].getElementsByClassName('ProfileCard-bio');
            if (p[0].textContent.length > 1) {
              if (p[0].textContent.match(new RegExp(target), 'g') !== null) {
                console.log(p[0].textContent, 'text matching')
              }
            }
          }
        }, interval);
      }
    })()">Bookmarklet</a>

您的小书签将 运行 作为单行脚本,因此分号不是可选的。您的脚本失败,因为您缺少分号。

两个旁注:

  • 您的代码似乎无缘无故地使用了隐式全局变量。使用 var 声明变量。
  • 您最好使用 // 而不是 http:// 来启动脚本 URL,以确保不管本地页面的方案如何都能加载脚本。

<a href="javascript:(function(){
  if (!window.$ || window.$ !== window.jQuery) { 
    var script = document.createElement( 'script' );
    script.src = '//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'; 
    script.onload=releasetheScript;
    document.body.appendChild(script);
  } 
  else {
    releasetheScript();
  }

  function releasetheScript() {
    /* v--- need a semicolon on this line */
    var regex = ['ceo', 'fondateur', 'cofondateur', 'cto', 'cfo', 'daf', 'startup', 'entrepreneur', 'office manager', 'fintech', 'freelance', 'tech', 'founder', 'neobanque', 'banking', 'comptable', 'incubateur', 'coworking', 'PME', 'VC', 'accélérateur']; 
    var banned = ['|(?!', 'sex', 'porn'];  /* <-- here  */
    var target = regex.join('|') + banned.join('|') + ')';
    var interval = 10000;    /* <-- here  */
    var a = setInterval(function () {
      window.scrollTo(0,document.body.scrollHeight);
      var fields = $('.ProfileCard-userFields');
      for (var i = 0; i < fields.length; i++) {
        var p = fields[i].getElementsByClassName('ProfileCard-bio');
        if (p[0].textContent.length > 1) {
          if (p[0].textContent.match(new RegExp(target), 'g') !== null) {
            console.log(p[0].textContent, 'text matching');  /* <-- and here  */
          }
        }
      }
    }, interval);
  }
})()">Bookmarklet</a>

在所有语句的末尾添加分号,ASI 没有在您需要的地方填充分号。我不会费心去弄清楚为什么,只是养成总是使用它们的习惯。

    <a href="javascript:(function(){
      if (!($ = window.jQuery)) { 
        script = document.createElement( 'script' );
        script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'; 
        script.onload=releasetheScript;
        document.body.appendChild(script);
      } 
      else {
        releasetheScript();
      }
    
      function releasetheScript() {
        
        regex = ['ceo', 'fondateur', 'cofondateur', 'cto', 'cfo', 'daf', 'startup', 'entrepreneur', 'office manager', 'fintech', 'freelance', 'tech', 'founder', 'neobanque', 'banking', 'comptable', 'incubateur', 'coworking', 'PME', 'VC', 'accélérateur'];
        banned = ['|(?!', 'sex', 'porn'];
        target = regex.join('|') + banned.join('|') + ')';
        interval = 10000;
        a = setInterval(function () {
          window.scrollTo(0,document.body.scrollHeight);
          var fields = $('.ProfileCard-userFields');
          for (var i = 0; i < fields.length; i++) {
            var p = fields[i].getElementsByClassName('ProfileCard-bio');
            if (p[0].textContent.length > 1) {
              if (p[0].textContent.match(new RegExp(target), 'g') !== null) {
                console.log(p[0].textContent, 'text matching')
              }
            }
          }
        }, interval);
      }
    })()">Bookmarklet</a>