gpt4 book ai didi

javascript - 处理一个非常奇怪的 gChrome/Javascript 问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:37:01 24 4
gpt4 key购买 nike

我正在开发一个 Chrome 扩展,我必须点击 <input type='file' />在 javascript 中,通过 jQuery,显示“另存为”对话框。是的,有人告诉我 - 大多数浏览器不允许您这样做。然而,我发现了一些非常奇怪的事情——如果我通过地址栏点击一个文件输入元素(并弹出保存对话框),就像这样:

javascript: $("<input type='file' />").appendTo("body").click();

所以,我想如果我可以在那里做,那么我当然可以从我的内容脚本中做...

显然我错了。正在运行 $("<input type='file' />").appendTo("body").click();从我的内容脚本中,zilch 除了附加元素之外,甚至还模拟地址栏并执行 window.location = "javascript: $(\"<input type='file' />\").appendTo(\"body\").focus().click();";。 zilch 也是如此。

我最初的想法是,这可能是内容脚本中的某种 chrome 限制,但我错了 - 扩展名 jsShell它通过内容脚本工作,能够运行命令并顺利获得我想要的结果。

那么,有谁知道为什么 jsShell 和浏览器可以单击文件输入并获得“保存”对话框,但我的扩展程序不能?我已经尝试将 jsShell 拆开并弄清楚实现它的工作方式(尽管我没有看到它的工作方式有什么特别之处),但它仍然无法正常工作。并且控制台没有显示任何内容 - 没有错误,没有警告。

这让我的头过热,所以非常感谢您的帮助!

最佳答案

不确定问题的根源是什么,但我设法缩小了范围,也许对您有所帮助。

似乎只有在任何其他事件中触发时才会触发 click 事件。例如,这有效:

$("body").mouseover(test);

function test() {
$("<input type='file' />").appendTo("body").click();
}

这也行:

$("body").append($("<a/>").text("test").click(test));

但这不是:

$("body").append($("<a/>").text("test").click(function(){
setTimeout(test,1000);
}));

Jsshell 在单击按钮时评估您的脚本,因此它可以工作,如果您尝试在不单击按钮的情况下评估此脚本,它将无法工作。

我猜这是一种安全功能,允许仅在用户执行某些操作时触发事件,而不是来自某些后台进程。

关于javascript - 处理一个非常奇怪的 gChrome/Javascript 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5248910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com