让我的用户脚本等待其他脚本加载

2024-04-06

[Edit:我将用一个演示问题的简化示例来替换原来的、令人困惑的问题。]

背景

我正在尝试编写一个将在 Chrome 中运行的用户脚本。该脚本需要调用 JavaScript 函数AlertMe()它位于用户脚本之外——此函数是页面的一部分,包含在服务器端动态生成的变量,因此不可能在我的用户脚本中重写此函数。

Code

页面上的脚本 (访问页面 http://martinsmucker.com/demo/alertme.html):

<script type="text/javascript">
    function AlertMe()
    {
        alert("Function AlertMe was called!");
        // then do stuff with strings that were dynamically generated
        // on the server so that I can't easily rewrite this into the userscript
    }
</script>

我的用户脚本(在 Chrome 中安装它 http://martinsmucker.com/demo/martinsmucker.user.js):

function tryAlert()
{
    if (typeof AlertMe == "undefined") {
        console.log('AlertMe is undefined.');
        window.setTimeout(tryAlert, 100);
    }
    else {
        AlertMe();
    }
}

tryAlert();

问题

当我尝试简单地调用该函数时,Chrome 的控制台让我知道AlertMe is not defined。认为这是因为我的用户脚本在加载所有其他脚本之前运行,我使用setTimeout等待AlertMe函数被定义。

不幸的是,如果您安装脚本然后访问该页面,您会看到这只是输出AlertMe is undefined.永远并且永远不会调用该函数。如果您输入typeof AlertMe进入 Chrome 的控制台,它会正确响应"function",那么为什么我的用户脚本总是认为AlertMe是未定义的?


您始终可以编写一个小函数来检查该函数是否已加载

function waitForFnc(){
  if(typeof absearch == "undefined"){
    window.setTimeout(waitForFnc,50);
  }
  else{
    runMyFunction();
  }
}

function runMyFunction(){
    var urlParams = window.location.search.substring(1).split('&'),
        username = "",
        hscEmailInput = document.getElementById('userfield6'),
        i = 0;
    if (urlParams !== "") {
        for (i = 0; i < urlParams.length; i++) {
            if (urlParams[i].substr(0,4) === "USER") {
                username = urlParams[i].replace('USER=', '');
                hscEmailInput.value = username + '@example.com';
                absearch('&PAGESIZE=1');
            }
        }
    }
}

waitForFnc();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让我的用户脚本等待其他脚本加载 的相关文章

  • 无法在 JavaScript for 循环中读取 null 的属性“长度”

    我正在尝试制作一个像 Stack Overflow 那样的 Markdown 编辑器 如果我实际上没有在文本区域中键入星号和包含短语的 http 我会收到标题中列出的此错误 如果我只输入包含星号的短语 则错误指的是这一行 if linkif
  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • Javascript - 在加载所有图像后执行

    看了别人的问题我想 window onload 会回答我的问题 我已经尝试过这个 但它会在页面加载时立即执行代码 而不是在图像加载之后 如果有什么区别的话 图像来自 CDN 并且不是相对的 有人知道解决办法吗 我没有使用 jQuery 想要
  • 样式标签中的源映射是否有效?

    我在标签和源映射中遇到 CSS 问题 为了缩短项目的加载时间 我改变了将 CSS 放入 HTML 的方式 将其改为 h1 Source maps working wonderfully h1 进入这个
  • 以一定时间间隔连续重复运行 JavaScript 函数

    这是我的第一个问题 希望您尽快回答 我想要代码连续重复一个函数 我尝试了一些代码 但没有成功 我尝试了这段代码 我想在一段时间后重复这个功能 我努力了setInterval and setTimeout 但是 我还没有收到结果 这将重复该任
  • Chrome 扩展同步调用 - 仅在窗口关闭后创建窗口

    我有这个代码 function voteNewWindow mailNum chrome windows create url http www google com incognito true function window conso
  • 从控制台检查 chrome 版本

    有没有办法从控制台检测 Google Chrome 的版本 我知道我可以解析用户代理字符串 但我更喜欢更简洁的方式 这是我目前拥有的 var uaStr navigator userAgent toLowerCase var index u
  • 将文本大小调整为矩形 在 Canvas HTML5 中调整大小

    我是 Canvas 新手 我正在创建一个网站 以在调整矩形大小时增加文本 我尝试了很多 但没有任何效果 实际上 我希望如果我仅按其宽度调整矩形大小 向左拉伸 向右拉伸 则仅应增加文本宽度而不是字体大小 我已经完成了字体大小 但发现增加孤立文
  • 如何使用 Angular JS 单击时将 html 模板附加到 div/指令?

    我有这种情况
  • 知道 HTTP 请求是否来自 Chrome URL 自动完成功能?

    我们有一个网络应用程序可以响应GET logout并删除您的会话cookie 如果您开始输入以 l进入地址栏 Chrome 会自动建议 logout 当它这样做时 它会发出请求 logout预取内容 结果是用户意外注销 我的 HTTP 服务
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • 判断一个数字是否能被 3 或 5 整除 (FizzBu​​zz)

    如何根据输出是否能被 3 或 5 整除来更改输出 如果它能被 3 整除 我想显示 rock 如果它能被 5 整除 我想显示 star 类似于 FizzBu zz 如果两者都有 他们都会看到 这是我的代码 if var n Math floo
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程
  • 在管道中重用变量的功能方式

    在 javascript 和 typescript 中与 Ramda 一起使用函数式编程 我经常发现自己编写如下代码 const myFun c gt const myId c id const value pipe getAnotherO
  • 为什么将 x 和 y 设置为 0 时 svg 文本会消失?

    我刚刚开始阅读有关svg我提出了以下问题 我正在创建一个简单的svg with a text里面如下图所示 从我的阅读中我了解到x and y of the text标签声明文本在标签内的位置svg space 为什么当我同时设置x and
  • 计算文本选择的 xy 位置

    我正在尝试使用 DOM 元素创建自己的文本选择 是的 我的意思是当您在此元素中选择文本时 您会在文本后面看到蓝色背景 这个想法是停止默认行为 蓝色 并使用我自己的元素来完成工作 方法是找到选择的 xy 位置 然后放置绝对定位的元素 我希望能
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • 从 DirectionsRenderer 中获取折线或标记的事件

    我正在使用 DirectionsService 和路线方法来生成 DirectionsResult 我还使用 DirectionsRenderer 对象来显示结果 因为它非常易于使用 我在检测 Directions changed 事件时没
  • 使用 AngularJS 多部分表单数据将文件上传到 Google Cloud Storage

    我正在尝试使用 AngularJS 中指定的多部分方法将图像文件上传到 Google Cloud Storagehttps cloud google com storage docs json api v1 how tos upload m
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘

随机推荐

  • 自动化时的 PowerShell 和 Excel 问题

    我面临着一个奇怪的问题 当我运行这段代码时 Excel New Object Com Excel Application book Excel Workbooks Add threading thread CurrentThread Cur
  • SpringBoot Undertow:如何分派到工作线程

    我目前正在查看 springboot undertow 对我来说 不太清楚如何将传入的 http 请求分派到工作线程以阻止操作处理 看着班级Undertow 嵌入式 Servlet Container class 看起来没有办法实现这种行为
  • 如何从PDO PHP 中的prepare() 获取查询错误?

    st db gt prepare SELECT FROM c6ode 在上述情况下 如何检查查询的故意 mysql 错误 需要设置错误模式属性PDO ATTR ERRMODE to PDO ERRMODE EXCEPTION 因为您期望异常
  • C 中 scanf 函数的格式说明符中 %c 规范之前的空格

    当我之间不包含空格时 d and c格式字符串中的规范scanf 在以下程序中运行函数 并在运行时输入 4 h 则输出为 Integer 4 and Character 究竟如何可变 c 在这种情况下接受输入 如果我在之间包含空格 会有什么
  • 在Google搜索时如何从第一页获取图像?

    通常使用Google搜索城市后 右侧会出现维基百科页面的一部分 其中包含图像和地图 谁能告诉我如何访问该图像 我应该知道怎么下载 实际上 主图像 与右侧地图图像一起 很少来自维基百科 因此您无法使用维基百科 API 来获取它 如果您想访问实
  • 在 GridView 或 ListView 底部添加额外空间

    是否可以在 GridView 底部添加额外的空间 有点像空行 我希望当你向下滚动到 GridView 底部时 会有额外的 50dp 的空白空间 我尝试设置paddingBottom到50dp 但似乎没有改变任何东西 如果我理解正确的话 它应
  • Grails - SpringSecurityPlugin 不生成控制器

    我是 Grails 新手 我按照说明安装 SpringSecurityPlugin 版本 2 0 RC2 并执行命令 grails s2 quickstart 用户角色 应该在其他文件中生成 登录控制器 and 注销控制器 但这些控制器不会
  • Kafka - 如何捕获kafka客户端后台线程生成的消息

    使用以下配置来模拟消费者关闭 会话超时 我们如何捕获客户端记录到控制台的消息 SESSTMOUT rdkafka consumer 1 第三 主要 consumed message None msg1 0 first topic 0 Non
  • 如何让编译日志在Emacs中创建一个新窗口?

    如果我在 emacs 中只显示一个窗口并使用 M x 编译 则该窗口会一分为二 我可以轻松查看编译缓冲区 但是 如果我显示更多窗口 编译日志就会接管其他窗口之一 这让我感到恼火 如何让emacs始终分割一个新窗口来显示编译日志 编辑 从我一
  • 主要和次要刻度线风格不同,整个页面覆盖D3?

    我想绘制一个带有主要和次要刻度的轴 以不同的方式覆盖我的整个页面 我遵循的结构this https stackoverflow com questions 19242674 major and minor ticks with v3 of
  • 访问数据转换问题

    我正在使用 Access 2003 有一个表 其中文本数据列中包含一些日期值 如下所示 May 97 Jun 99 Jun 00 Sep 02 Jan 04 我需要将它们转换为正确的日期格式并转换为另一个日期 时间列 因此创建一个新的日期
  • 使用 WiX 进行重大升级后无法启动 Windows 服务

    我有一个非常简单的 WiX 项目 没有什么花哨 当尝试对现有安装执行 MajorUpgrade 时 无法启动服务 并且不可避免地会回滚到以前的版本并正常启动服务 我已经删除了Start install 并成功手动启动应用程序 所以我知道这不
  • [__NSCFDictionary setObject:forKey:]:发送到不可变对象的变异方法

    id init if self super init NSMutableArray listname NSMutableArray alloc initWithObjects cu al zn au ru fu rb pb wr nil N
  • 动画后接收指针事件的链接在 Safari 中不可点击

    我正在使用 CSS 为文本添加动画 其中元素一个接一个地出现 首先尝试一下看看我的意思 wrapper pointer events none remove pointer events from elements before they
  • 加载文件量角器失败 - 失败:脚本超时:11 秒内未收到结果

    我尝试执行使用量角器上传文件的测试时出错 我的代码是这个 it it should be possible to upload a file function browser get buildUrl popupEnvironment el
  • 设置Flex Slider轮播图片的显示量

    我在我的网站上嵌入了带有轮播的柔性滑块 但是 我没有很好地设置滑块的属性 或者可能是CSS 它是这样的 http www screencast com t xlRssnj43 http www screencast com t xlRssn
  • tcplistener绑定所有本地地址?

    我正在使用一个服务器应用程序 我将地址绑定到 127 0 0 1 直到我想从虚拟机内的客户端进行连接时 一切都很好 所以我将它绑定到 192 现在我的测试全部连接到 127 无法连接 我知道我可以使用 Any 但我不想连接外部互联网 我知道
  • Windows Phone 8 绑定到具有格式的字符串资源

    我的本地化资源字符串 名为TextResource具有以下值 Text 0 Where 0 是 String Format 的占位符 我的用户控件有一个名为 DependecyPropertyCount 我想绑定Count到文本框的文本 还
  • 发送包含数据框作为弹性表的电子邮件

    我有一个每天用来发送邮件的代码 我使用 xtable 包来完成它 但最近 我已经习惯使用弹性表 因为它更符合我的要求 但是当我更改代码以使用 flextable 函数时 我发送的只是一封没有正文的空白邮件 这是示例数据集 samplemon
  • 让我的用户脚本等待其他脚本加载

    Edit 我将用一个演示问题的简化示例来替换原来的 令人困惑的问题 背景 我正在尝试编写一个将在 Chrome 中运行的用户脚本 该脚本需要调用 JavaScript 函数AlertMe 它位于用户脚本之外 此函数是页面的一部分 包含在服务