javascript - 在通过 Safari App Extension 注入的 JavaScript 中以编程方式单击 HTML 链接
问题描述
我正在编写一个 Safari 应用程序扩展来自动登录到 Citrix Web 门户。我注入的 JavaScript 需要做两件事。首先,要提交一个 HTML 表单(带有名称/密码)。这工作得很好,并将我带到另一个需要单击 HTML 锚的页面。问题是我无法以编程方式单击 HTML 锚链接。
// This is the `script.js` injected by my Safari App Extension
document.addEventListener("DOMContentLoaded", function(event) {
if (document.URL.includes("IdentityFederationPortal")) {
document.getElementById("UserId").value = "..." // my login
document.getElementById("Password").value = "..." // my password
document.getElementById("submit").click() // <- works correctly
}
// The `.click()` method above works just fine, I assume because it is used on a form button.
if (document.URL.includes("TPDCWeb")) {
var loginLink = document.querySelector("#plugin-assistance-download > div > div > div > div.footer > a.pluginassistant-skiplink.web-screen-link._ctxstxt_SkipToLogon._ctxsattr_title_SkipToLogonTip");
console.log(loginLink) // console shows loginLink is assigned the correct HTML anchor
loginLink.click() // does not work!
}
});
笔记:
我需要以编程方式单击的锚链接的实际 HTML 是:
<a class="pluginassistant-skiplink web-screen-link _ctxstxt_SkipToLogon _ctxsattr_title_SkipToLogonTip" href="#" title="Click here to skip to log on">Log on</a>
我对 Web 编程不够熟悉,无法理解普通用户单击该链接时会发生什么,通过简单的检查似乎不会导致任何地方(和有一个NULL
onClick
属性)。我看到分散的参考资料表明 jQuery 在这里可能有用,但我也无法弄清楚如何将 jQuery 注入 Safari 应用程序扩展脚本。到目前为止,
Can't find variable $
当我尝试使用 jQuery 时,我的尝试导致了错误。
解决方案
在user1538301的帮助下,我现在有了这个工作,只需将.click()
方法调用延迟4 秒。正如所指出的,大概我试图在页面自己的 JavaScript 完成其业务并分配一个onclick
处理程序或类似的东西之前“单击”链接。我确信有一种更优雅的方式来处理这个问题,但是简单的时间延迟现在可以为我完成工作。
if (document.URL.includes("TPDCWeb")) {
function getAndClickLink() {
var loginLink = document.querySelector("#plugin-assistance-download > div > div > div > div.footer > a.pluginassistant-skiplink.web-screen-link._ctxstxt_SkipToLogon._ctxsattr_title_SkipToLogonTip");
loginLink.click()
}
setTimeout(getAndClickLink, 4000);
}
推荐阅读
- azure - Flask Dance OAuth 通过 Microsoft Azure 错误
- amazon-web-services - 创建 cloudformation 模板时预填充键(但不是值)标签
- javascript - 如何用 React Link 组件替换部分字符串
- android - 在 contraintlayout 中获取子布局的高度和宽度
- java - 从可执行 jar 运行 spring 测试
- wso2 - WSO2 开发人员工作室不显示 API 资源属性选项卡
- c++ - 交叉编译树莓派
- sql - 将 5 位整数转换为时间
- r - 将矩阵转换为因子值时保留行名
- c++ - 在 C++ 应用程序中使用 Tensorflow:如何释放 GPU 内存