当前位置: 首页 > 知识库问答 >
问题:

无法添加事件侦听器

惠文彬
2023-03-14

我可以在下面的代码中为blank添加事件侦听器,但不能添加到twitter

const blank = window.open();
const twitter = window.open("https://twitter.com");

const PrintClick = function (name) {
    return function (...args) {
        console.log(name, ...args);
    };
};

blank.addEventListener("click", PrintClick("blank"));
twitter.addEventListener("click", PrintClick("twitter"));

是不是因为twitter做了一些事情不让我这么做?有办法绕过它吗?

共有3个答案

方璞
2023-03-14

大多数浏览器不支持多个弹出窗口,因此为了实现这一点,需要尝试使用:

window.open(yoururl,"_blank",'PopUp',randomnumber,'scrollbars=1,menubar=0,resizable=1,width=850,height=500');

或者为每个窗口指定一个新的窗口名。

window.open(url, WindowName)

您不能使用JavaScript添加具有不同来源的事件侦听器,如果您可以这样做,这将是一个巨大的安全缺陷。对于主域同源策略,浏览器会阻止试图访问具有不同原点的帧的脚本。

如果地址的以下部分中至少有一部分未保留,则认为来源不同:

<protocol>://<hostname>:<port>/...

如果要访问帧,则协议、主机名和端口必须与域相同。

下面是从http://www.example.com/home/index.html

URL                                             RESULT 
http://www.example.com/home/other.html       -> Success 
http://www.example.com/dir/inner/another.php -> Success 
http://www.example.com:80                    -> Success (default port for HTTP) 
http://www.example.com:2251                  -> Failure: different port 
http://data.example.com/dir/other.html       -> Failure: different hostname 
https://www.example.com/home/index.html:80   -> Failure: different protocol
ftp://www.example.com:21                     -> Failure: different protocol & port 
https://google.com/search?q=james+bond       -> Failure: different protocol, port & hostname 

不推荐

我将链接相关的答案。但是,请记住,禁用同源策略只会影响浏览器。此外,在禁用同源安全设置的情况下运行浏览器会授予任何网站访问跨源资源的权限,因此这是非常不安全的,如果您不确切知道自己在做什么(例如开发目的),则不应这样做。

  • 谷歌浏览器
孟德曜
2023-03-14

出于安全原因,浏览器会禁用您不拥有的域之间的任何交互。想象一下你能用它做什么。

向苗宣
2023-03-14

AdvestListEnter只能监听当前页面的DOM对象,可以考虑SeleFieldFramework操作

 类似资料:
  • 我的代码使用jQuery。我有一个密码输入框,我想要得到输入的密码任何时候。 下面是我的代码: 我确信这是一个正确的代码,因为当我在浏览器的控制台中输入它时,它可以工作,但当我重新加载页面时,它就不工作了 我能做什么?

  • 将事件侦听器添加到可以使用事件委派的元素。 使用 EventTarget.addEventListener() 将一个事件监听器添加到一个元素。 如果提供了 选项对象(opts) 的 target 属性,确保事件目标匹配指定的目标元素,然后通过提供正确的 this 上下文来调用回调。 返回一个对自定义委派函数的引用,以便与 off 一起使用。 忽略 opts ,则默认为非委派行为,并且事件冒泡。

  • 问题内容: 我有一个类似的反应成分: 这里,事件列表器已添加到组件。当我刷新页面时,它弹出窗口要求离开页面。 但是当我转到另一个页面并刷新时,它再次显示相同的弹出窗口。 我正在从中删除组件。那为什么不将其删除呢? 如何删除其他页面上的事件? 问题答案: 本应该得到的引用到在分配相同的回调。重新创建该功能将无效。解决方案是在其他地方(在本示例中)创建回调,并将其作为对和的引用传递: 反应钩子 您可以

  • 问题内容: 在JavaScript中,删除使用bind()添加为事件侦听器的函数的最佳方法是什么? 例 我能想到的唯一方法是跟踪添加了bind的每个侦听器。 上面的示例使用此方法: 有没有更好的方法可以做到这一点? 问题答案: 尽管@machineghost所说的是正确的,但事件的添加和删除方式相同,但等式中缺少的部分是: 调用后会创建一个新的函数引用! 因此,要添加或删除它,请将引用分配给变量:

  • 我试图在程序中使用按键侦听器。我已将此类添加到我的主类中: 但是,我无法将addKeyListener(new CustomKeyListener())方法添加到我的主类中的任何位置。我错过了什么? 根据我之前的问题,我知道它只适用于图形界面。我是否应该添加一些任意形式,这样就可以了? 有人能解释一下这个问题吗?

  • 我有jbpm系统(),我想在系统内使用一个全局的。我创建了简单的过程事件lestener: 我的pom。xml: 当我将其添加为部署依赖项并通过工作台将其声明为jbpm项目中的事件监听器时,一切都运行正常。 但是现在我有很多项目,把事件监听器附加到每个项目上很不舒服。因此,我在wildfly中创建了新模块: 已创建部署描述符。xml服务器级别: 因此,当我创建一个新的jbpm进程并通过工作台将其部