ir.QueryInterface Error when using Zotero.CookieSandbox

59 views
Skip to first unread message

linxz...@gmail.com

unread,
Jul 4, 2023, 9:53:36 PM7/4/23
to zotero-dev
Hi

I use `Zotero.CookieSandbox` to send cookie data to cnki.net to scrape metadata in Jasminum. When I am transferring the plugin to z7b, the same code used in z6 throws an error  `TypeError: ir.QueryInterface is not a function`

Below is my sample code, I hope someone can give me some suggestions to fix it.

let cookieData =
          "Ecp_ClientId=1200104193103044969; RsPerPage=20; " +
          "cnkiUserKey=60c42f4d-35a2-6d3f-6efc-ad01eaffd4c3; " +
          "_pk_ref=%5B%22%22%2C%22%22%2C1604497317%2C%22https%3A%2F%2Fcnki.net%2F%22%5D; " +
          "ASP.NET_SessionId=zcw1abnl5vitqcliiq5almmj; " +
          "SID_kns8=123121; " +
          "Ecp_IpLoginFail=20110839.182.10.65";
let userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36";
let baseUrl = "https://cnki.net/";
let cookiebox = new Zotero.CookieSandbox(null, baseUrl, cookieData, userAgent);
let postData = `IsSearch=true&QueryJson=%7B%22Platform%22%3A%22%22%2C%22DBCode%22%3A%22SCDB%22%2C%22KuaKuCode%22%3A%22CJFQ%2CCDMD%2CCIPD%2CCCND%2CCYFD%2CSCOD%2CCISD%2CSNAD%2CBDZK%2CGXDB_SECTION%2CCJFN%2CCCJD%22%2C%22QNode%22%3A%7B%22QGroup%22%3A%5B%7B%22Key%22%3A%22Subject%22%2C%22Title%22%3A%22%22%2C%22Logic%22%3A4%2C%22Items%22%3A%5B%5D%2C%22ChildItems%22%3A%5B%7B%22Key%22%3A%22input%5Bdata-tipid%3Dgradetxt-1%5D%22%2C%22Title%22%3A%22%E7%AF%87%E5%90%8D%22%2C%22Logic%22%3A2%2C%22Items%22%3A%5B%7B%22Key%22%3A%22%22%2C%22Title%22%3A%22%E5%9F%BA%E4%BA%8E%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1%E7%9A%84%E5%B0%8F%E5%BE%AE%E4%BC%81%E4%B8%9A%E8%B4%B7%E6%AC%BE%E7%94%B3%E8%AF%B7%E5%8F%8D%E6%AC%BA%E8%AF%88%E6%96%B9%E6%A1%88%22%2C%22Logic%22%3A1%2C%22Name%22%3A%22TI%22%2C%22Operate%22%3A%22%3D%22%2C%22Value%22%3A%22%E5%9F%BA%E4%BA%8E%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1%E7%9A%84%E5%B0%8F%E5%BE%AE%E4%BC%81%E4%B8%9A%E8%B4%B7%E6%AC%BE%E7%94%B3%E8%AF%B7%E5%8F%8D%E6%AC%BA%E8%AF%88%E6%96%B9%E6%A1%88%22%2C%22ExtendType%22%3A1%2C%22ExtendValue%22%3A%22%E4%B8%AD%E8%8B%B1%E6%96%87%E5%AF%B9%E7%85%A7%22%2C%22Value2%22%3A%22%22%7D%5D%2C%22ChildItems%22%3A%5B%5D%7D%2C%7B%22Key%22%3A%22input%5Bdata-tipid%3Dgradetxt-2%5D%22%2C%22Title%22%3A%22%E4%BD%9C%E8%80%85%22%2C%22Logic%22%3A1%2C%22Items%22%3A%5B%7B%22Key%22%3A%22%22%2C%22Title%22%3A%22%E9%87%91%E7%A3%90%E7%9F%B3%22%2C%22Logic%22%3A1%2C%22Name%22%3A%22AU%22%2C%22Operate%22%3A%22%3D%22%2C%22Value%22%3A%22%E9%87%91%E7%A3%90%E7%9F%B3%22%2C%22ExtendType%22%3A1%2C%22ExtendValue%22%3A%22%E4%B8%AD%E8%8B%B1%E6%96%87%E5%AF%B9%E7%85%A7%22%2C%22Value2%22%3A%22%22%7D%5D%2C%22ChildItems%22%3A%5B%5D%7D%5D%7D%2C%7B%22Key%22%3A%22ControlGroup%22%2C%22Title%22%3A%22%22%2C%22Logic%22%3A1%2C%22Items%22%3A%5B%5D%2C%22ChildItems%22%3A%5B%5D%7D%5D%7D%7D&PageName=DefaultResult&DBCode=SCDB&KuaKuCodes=CJFQ%2CCCND%2CCIPD%2CCDMD%2CCYFD%2CBDZK%2CSCOD%2CCISD%2CSNAD%2CCCJD%2CGXDB_SECTION%2CCJFN&CurPage=1&RecordsCntPerPage=20&CurDisplayMode=listmode&CurrSortField=&CurrSortFieldType=desc&IsSentenceSearch=false&Subject=`;
let postUrl = "https://kns.cnki.net/KNS8/Brief/GetGridTableHtml";
let requestHeaders = {
    Accept: "text/html, */*; q=0.01",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7",
    Connection: "keep-alive",
    "Content-Length": "2085",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    Host: "kns.cnki.net",
    Origin: "https://kns.cnki.net",
    Referer:
        "https://kns.cnki.net/kns8/AdvSearch?dbprefix=SCDB&&crossDbcodes=CJFQ%2CCDMD%2CCIPD%2CCCND%2CCISD%2CSNAD%2CBDZK%2CCJFN%2CCCJD",
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Site": "same-origin",
    "X-Requested-With": "XMLHttpRequest",
};
let resp = await Zotero.HTTP.request("POST", postUrl, {
    headers: requestHeaders,
    cookieSandbox: cookiebox,
    body: postData,
});
return resp.responseText

linxz...@gmail.com

unread,
Jul 16, 2023, 11:16:57 PM7/16/23
to zotero-dev

I found XMLHttpRequest has something different between Z6 and Z7. Maybe this API is updated from Firefox 60 to Firefox 102?

var xmlhttp = new XMLHttpRequest(); xmlhttp.QueryInterface // undefined in Z7, return a function in Z6

Undefined xmlhttp.QueryInterface will throw an undefined function error when calling Zotero.CookieSandbox.attachToInterfaceRequestor.

Is there any plan to fix this error?

Dan Stillman

unread,
Jul 17, 2023, 6:58:31 AM7/17/23
to zoter...@googlegroups.com
This will be fixed in Z7 beta 21 — thanks!

- Dan
Reply all
Reply to author
Forward
0 new messages