自己也搞了一个类似功能的在线查看,但是没有返回网址的功能,想改下你的动作,仅作为个人使用,谢谢。
(async function() {
try {
const zp = Zotero.getActiveZoteroPane();
const items = zp.getSelectedItems();
// 验证选中条目
if (!items.length) throw new Error("请先选中文献条目");
const item = items[0];
// 三级地址探测策略
const onlineSources = [
// 1. 直接URL字段
item.getField('url'),
// 2. DOI转换链接
item.getField('DOI') ? `https://doi.org/${item.getField('DOI')}` : null,
// 3. 附件在线地址
...item.getAttachments().map(id => {
const att = Zotero.Items.get(id);
return att?.getField('url') || att?.attachmentUrl;
})
].filter(url => url && /^https?:\/\//i.test(url));
// 执行在线查看
if (onlineSources.length > 0) {
// 优先使用条目URL
const targetURL = onlineSources[0];
// 方案A:浏览器打开
Zotero.launchURL(targetURL);
// 方案B:内置阅读器打开(需Zotero 7+)
// await Zotero.Reader.openURL(targetURL);
return `正在打开:${targetURL}`;
}
throw new Error("未找到可在线访问的资源");
} catch(e) {
Zotero.logError(e);
return "操作失败:" + e.message;
}
})();
你好,由于zotero的版本差异,该动作在此之前应该对大多数用户都不可用,个人也不打算维护了,但由于做了很多适配工作,不太愿意开放编辑。
收到你的反馈之后,我尝试完善你的需求,现在已经对大多数用户可用了,但是因为时间有限,没有彻底解决无法正确获取到openurl的问题,本人也很少用这个。
考虑到openurl可能是你比较重视的内容,我已开放编辑权限,祝一切顺利!