MaoXian 与第三方的交互 (已过期)

警告: 该页面所描述的内容已过期(即不再推荐使用), 通过下面新的链接获取新的内容

毛线助手 编程接口


为了更方便地进行裁剪,MaoXian 提供了一些与第三方脚本交互的方式。

目前利用这个交互功能,可以做到:

流程简介

版本信息

当前 mx-wc-tool.js 版本为 V0.0.6 ,你应该始终使用最新的版本。

编写脚本

预设置表单的输入值

mx-wc-tool.js 脚本文件会帮助你监听 扩展进入裁剪模式 事件,并告知扩展,待会显示表单后,填入这些值。

注意: 如果你的脚本同时用到了下方的 ConfirmCmd ,则需要让 MxWc.setFormInputs 最先运行(这两个功能监听的是同一事件,有先后顺序的问题)。

隐藏不想要裁剪的元素

MaoXian 会在你点击裁剪的时候,发送事件,告知 userScript 扩展已经进入裁剪模式了。此时 userScript 就可以对网页上的元素进行操作,比如隐藏掉不想要裁剪的元素(按钮、头像等等)

例:

// 注意:这里省略了 UserScript 的声明部分

(function(){
  const rules = [
    'C||a.example.com||/blog/||.nav-btns',
    'C||a.example.com||/blog/||.site-header',
    'X||b.example.com||/blog/||//article//comments'
  ];

  const hideCmd = MxWc.newHideCmd();
  hideCmd.init(rules);
})();

目前 mx-wc-tool 这个脚本文件,支持的 rule 格式为: $type||$domain||$path||$q

各部分解释如下:

$type   : C 代表 CSS, X 代表 xPath.
$domain : 规则应用的域名( 支持通配符 *, *.example.org 或者直接 *)
$path   : 规则应用的网址路径,(目前使用包含匹配, 即 /post/ 匹配任何包含 /post/ 的路径)
$q      : 选择器(CSS selector 或者 xPath)

即 mx-wc-tool 会拿当前页面的网址和规则里的 $domain$path进行匹配,若当前页面符合规则,就根据 $type$q 找到要操作的元素, 再执行相关的操作。

rule 也可以是下面的格式(较简短)

预选中某个要裁剪的元素

userScript 可以在 MaoXian 进入裁剪模式的时候,发送消息过去,告知预选中某个元素。

例:

// 注意:这里省略了 UserScript 的声明部分

(function(){

  // 更方便的写法
  const rules = (`
    C||a.example.com||/blog/||article
    C||a.example.com||/news/||.news
    X||b.example.com||/blog/||//body//article
  `).split("\n")

  const focusCmd = MxWc.newFocusCmd();
  focusCmd.init(rules);

/*
 * 或者使用 ConfirmCmd
 */
/*
  const confirmCmd = MxWc.newConfirmCmd();
  confirmCmd.init(rules);
 */
})();

上面例子中 FocusCmdConfirmCmd 的区别是 ConfirmCmd 不仅选中元素,还做了确认(直接到达输入表单信息那一步)。

注意FocusCmdConfirmCmd 会根据第一条匹配到的规则,操作找到的第一个元素,这和上面的 HideCmd 有所不同。HideCmd 会找匹配所有能匹配到的规则,操作所有找到的元素。

下面这个例子,会在当前网页只有一个 article 标签的情况下,会选中这个 article 标签并且确认。

// 注意:这里省略了 UserScript 的声明部分

(function() {
  var articles = document.querySelectorAll('article');
  if(articles.length === 1){
    const rules = ["C||*||/||article"];
    const confirmCmd = MxWc.newConfirmCmd();
    confirmCmd.init(rules);
  } else {
    // other rules
  }
})();

另 ConfirmCmd 还支持指定填写到表单的三个信息。

用法请看下面例子

// 注意:这里省略了 UserScript 的声明部分

(function() {
  const rules = (`
    js.awesome.code||#article
    py.awesome.code||#article
    c.elegant.code||#post
  `).split("\n");

  // 这是表单显示后,填写到里面的信息
  // 注:`ConfirmCmd` 设置的 `formInputs` 会比 `MxWc.setFormInputs` 拥有更高的优先级。
  const formInputs = {category: 'it/article', tagstr: 'technology'}
  const cmd = MxWc.newConfirmCmd(formInputs);
  cmd.init(rules);
})();

自动裁剪

这种情况应该比较少使用到,当你要裁剪某个站点下的一批内容时(比如某些文章),可以用这个功能。这样你要做的就只是配置好 userScript, 然后依次点开你要裁剪的网页就可以了(MaoXian 会在网页加载完成时,就开始裁剪)

这个功能一般是需要时才使用,所以建议, 使用 userScript 单独放一个脚本,必要时开启,用完关闭,会方便一些。

例:

// 注意:这里省略了 UserScript 的声明部分

(function(){

  // 这里只需要一条规则
  const rules = ["C||a.example.com||/blog/||article"];

  // 这是裁剪时候填写到表单的三个信息
  const formInputs = {
    title: "auto Clip test",
    category: "test/user-script",
    tagstr: "test, auto-clip"
  }

  const clipCmd = MxWc.newClipCmd(formInputs);

  // 这一步执行后,会很快进行裁剪
  clipCmd.init(rules);

})();

首页