除非新值严格数字,否则无法设置DOM元素的值

尼古拉斯·米亚里(Nicolas Miari)

免责声明:关于浏览器扩展和javascript的总初学者。

背景:我正在尝试开发一个概念验证的Chrome扩展程序,该扩展程序可以从加载到一个标签中的网页的HTML表单中的输入字段中提取文本,并在该页面的类似字段中输入相同的文本。另一个标签。

在我的特定示例中,页面是带有两个输入字段(“用户名”和“密码”)的最小本地HTML文件,目标是Apple开发人员网站(https://developer.apple)的登录页面。 com / account /)。

在这里阅读官方指南和问题,我整理了一些似乎可行的代码。

问题:只有包含数字的文本(例如:“ 111111”)会从一个选项卡复制到另一个选项卡。只要我的输入字段包含字母(例如:“ 111111a”),都不会发生任何事情。


这是源页面(本地file:///):

<html>
  <head>
    <title>Source Page</title>
    <meta charset="utf-8" />
    <script src="popup.js"></script>
  </head>
  <body>
    <form>
      <input id="accountname_src" name="appleId" placeholder="Apple ID" /><br />
      <input id="accountpassword_src" name="password" placeholder="Password" />
    </form>
  </body>
</html>

目标HTML(Apple页面)具有类似的输入字段,分别具有元素ID为accountnameaccountpassword

我的扩展程序的脚本如下:

document.addEventListener('DOMContentLoaded', function(){
    // The button in the browser action popup:
    var button = document.getElementById('autofill');

    var sourceTabID = null;
    var destTabID = null;

    // Get the SOURCE tab id:
    chrome.tabs.query({'title': 'Source Page'}, function(tabArray){
        sourceTabID = tabArray[0].id;
    });

    // Get the DESTINATION tab id:
    chrome.tabs.query({'title': 'Sign in with your Apple ID - Apple Developer'}, function(tabArray){
        destTabID = tabArray[0].id;
    });

    if (button !== null){
        button.addEventListener('click', function(){

            // Get entered text from Source page:
            chrome.tabs.executeScript(sourceTabID, {file: "read_input.js"}, function(results){

                var credentials = results[0];
                var userName = String(credentials[0]); 
                var password = String(credentials[1]);

                // Pass values to Apple login page:
                var insertUserNameCode = "document.getElementById('accountname').value = " + userName + ";"
                var insertPasswordCode = "document.getElementById('accountpassword').value = " + password + ";"
                var autofillCode = insertUserNameCode + insertPasswordCode;

                chrome.tabs.executeScript(destTabID, {code:autofillCode});
            });

            //window.close();
        });
    }
}); 

当然,read_input.js的内容是:

var userName = document.getElementById("accountname_src").value;
var password = document.getElementById("accountpassword_src").value;

var attributes = [userName, password]; 

attributes  // (Final expression, passed to callback of executeScript() as 'results')

感觉某个地方可能存在类型推断问题,但无法分辨出位置。


奖励问题:

我可以使用上面的外部脚本和方法读取源页面中的输入字段但是当我尝试使用类似的方法将值写入目标选项卡时,脚本无法运行(这就是为什么我在代码中使用的原因)。知道会发生什么吗?read_input.jschrome.tabs.executeScript(..., file:...chrome.tabs.executeScript(..., code:...

尼古拉斯·米亚里(Nicolas Miari)

愚蠢的我 (再次) ...console.log些许东西引导我朝着正确的方向...

我没有在脚本中转义该值;这些行:

var insertUserNameCode = "document.getElementById('accountname').value = " + userName + ";"
var insertPasswordCode = "document.getElementById('accountpassword').value = " + password + ";"

...应该:

var insertUserNameCode = "document.getElementById('accountname').value = '" + userName + "';"
var insertPasswordCode = "document.getElementById('accountpassword').value = '" + password + "';"

(在值周围添加了单个刻度)

...以使代码最终显示为:

document.getElementById('accountname').value = '111111a';

...代替:

document.getElementById('accountname').value = 111111a;

不过,仍然不确定为什么仅数字值有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

除非设置为可写,否则无法覆盖readyOnly可配置的功能值对象原型属性

来自分类Dev

除非您指定“写入”选项,否则无法将值写入ko.computed

来自分类Dev

淘汰赛JS错误:除非您指定“写入”选项,否则无法将值写入ko.computed

来自分类Dev

除非使用计时器,否则无法在运行时选择动态创建的组合框的值

来自分类Dev

错误:除非您指定“写入”选项,否则无法将值写入ko.computed。如果要读取当前值,请不要传递任何参数

来自分类Dev

除非本地登录,否则无法登录SSH

来自分类Dev

除非使用CApath或CAfile,否则无法验证CA证书

来自分类Dev

除非本地登录,否则无法登录SSH

来自分类Dev

除非使用Firefox,否则无法访问YouTrack

来自分类Dev

除非root用户,否则无法统计SSHFS挂载

来自分类Dev

除非提供'--module'标志,否则无法编译模块

来自分类Dev

如果不是数字,则无法比较数组值

来自分类Dev

除非调用alert(),否则不会设置在异步回调中设置的值?

来自分类Dev

如何使用 puppeteer 设置 DOM 元素的值?

来自分类Dev

按类检查元素的值,如果元素存在则编辑值,否则添加新的html

来自分类Dev

最小起订量/单元测试除非单步执行代码,否则无法捕获异常

来自分类Dev

除非安装了Visual Studio,否则无法使用C ++ / CLI DLL

来自分类Dev

除非我引用项目,否则无法加载WinRT组件

来自分类Dev

除非手动创建,否则无法识别对象

来自分类Dev

除非可见搜索UI,否则无法从DataTables中选择行

来自分类Dev

除非添加溢出属性,否则无法更改导航栏颜色

来自分类Dev

除非CSS文件扩展名以.css结尾,否则无法从文件URL加载CSS。

来自分类Dev

除非具有菜单项,否则无法单击菜单

来自分类Dev

在VS Code中打开JSDoc会产生“除非提供'--jsx'标志,否则无法使用JSX”

来自分类Dev

出现错误TS17004:除非提供'--jsx'标志,否则无法使用JSX

来自分类Dev

Create React App显示“除非提供'--jsx'标志,否则无法使用JSX”

来自分类Dev

除非具有root用户权限,否则无法写入闪存驱动器

来自分类Dev

除非以Debian中的root身份运行,否则无法运行vnstat

来自分类Dev

除非添加Thread.Sleep,否则无法使Task.Result返回字符串

Related 相关文章

  1. 1

    除非设置为可写,否则无法覆盖readyOnly可配置的功能值对象原型属性

  2. 2

    除非您指定“写入”选项,否则无法将值写入ko.computed

  3. 3

    淘汰赛JS错误:除非您指定“写入”选项,否则无法将值写入ko.computed

  4. 4

    除非使用计时器,否则无法在运行时选择动态创建的组合框的值

  5. 5

    错误:除非您指定“写入”选项,否则无法将值写入ko.computed。如果要读取当前值,请不要传递任何参数

  6. 6

    除非本地登录,否则无法登录SSH

  7. 7

    除非使用CApath或CAfile,否则无法验证CA证书

  8. 8

    除非本地登录,否则无法登录SSH

  9. 9

    除非使用Firefox,否则无法访问YouTrack

  10. 10

    除非root用户,否则无法统计SSHFS挂载

  11. 11

    除非提供'--module'标志,否则无法编译模块

  12. 12

    如果不是数字,则无法比较数组值

  13. 13

    除非调用alert(),否则不会设置在异步回调中设置的值?

  14. 14

    如何使用 puppeteer 设置 DOM 元素的值?

  15. 15

    按类检查元素的值,如果元素存在则编辑值,否则添加新的html

  16. 16

    最小起订量/单元测试除非单步执行代码,否则无法捕获异常

  17. 17

    除非安装了Visual Studio,否则无法使用C ++ / CLI DLL

  18. 18

    除非我引用项目,否则无法加载WinRT组件

  19. 19

    除非手动创建,否则无法识别对象

  20. 20

    除非可见搜索UI,否则无法从DataTables中选择行

  21. 21

    除非添加溢出属性,否则无法更改导航栏颜色

  22. 22

    除非CSS文件扩展名以.css结尾,否则无法从文件URL加载CSS。

  23. 23

    除非具有菜单项,否则无法单击菜单

  24. 24

    在VS Code中打开JSDoc会产生“除非提供'--jsx'标志,否则无法使用JSX”

  25. 25

    出现错误TS17004:除非提供'--jsx'标志,否则无法使用JSX

  26. 26

    Create React App显示“除非提供'--jsx'标志,否则无法使用JSX”

  27. 27

    除非具有root用户权限,否则无法写入闪存驱动器

  28. 28

    除非以Debian中的root身份运行,否则无法运行vnstat

  29. 29

    除非添加Thread.Sleep,否则无法使Task.Result返回字符串

热门标签

归档