小编tra*_*day的帖子

修改 Twitter 帖子上可编辑 Div 的内容

我正在编写一个 chrome 扩展,它可以帮助用户在 Twitter 上输入内容。当在 twitter 上写推文时,twitter 会打开一个可编辑的 div 容器。当用户输入内容时,twitter(可能正在使用某些网络框架)会生成子 div 并使用用户输入的文本跨度,并将它们放置在内容可编辑的 div 中。

问题是,当手动更改跨度值(例如,通过检查元素),然后再次键入某些内容时,跨度中的值将恢复为之前的值(在检查元素编辑之前)。这可能是因为实际输入的字符串存储在 javascript 中的某个位置,当用户输入 div 时,所有内容都会被再次覆盖。

我一直在尝试使用 JQuery 找到解决此问题的方法,但没有成功。我真的不知道如何开始。如果它只是一个常规的输入标签,您可以调用类似$("input").val("new value"), easy-peasy... 的内容,但我不知道如何为可编辑的 div 执行此操作,该 div 通过在页面上某处运行的 javascript 进行更新。

有一段时间,我只是觉得这是不可能的......

但现在我知道这是可能的。如果您下载 Grammarly 扩展并使用 Grammarly 弹出编辑器(打开一个新窗口来编辑文本),然后提交,twitter 可编辑内容 div 会相应更新,一切都会像魔术一样工作。

抱歉,如果这不是标准编程问题,但我在网上找不到任何与我想做的事情接近的内容。也许我只是经验不足,错过了一些非常明显的东西。我尝试查看 twitter 和 Grammarly 源代码,但都是缩小的乱码 JavaScript,我无法阅读......

感谢您的任何帮助和见解!

编辑:有问题的 Twitter 网址是:https://twitter.com/compose/tweet有问题的 div 是具有contenteditable="true"属性的 div(您可以在检查器中搜索它)

html javascript twitter jquery

5
推荐指数
0
解决办法
477
查看次数

Chrome 76 使用导航器将内容复制到剪贴板

我刚刚更新到 chrome 76 stable,并尝试使用新的剪贴板 API 将一些文本(以及稍后的图像)复制到剪贴板。但是,navigator.clipboard.write(data)似乎不起作用。这是我的代码:

setInterval(function() {
    console.log("Wriing to clipbard");  
    navigator.permissions.query({ name: 'clipboard-write' }).then(result => {
        if (result.state === 'granted') {
            var data = new Blob(["Text data"], {type : "text/plain"});
            navigator.clipboard.write(data).then(function() {
              console.log("Copied to clipboard successfully!");
            }, function(error) {
              console.error("unable to write to clipboard. Error:");
              console.log(error);
            });
        } else {
            console.log("clipboard-permissoin not granted: " + result);
        }
    });
}, 3000);
Run Code Online (Sandbox Code Playgroud)

我在 Chrome 扩展内容脚本中运行它,并设置了剪贴板权限,因此确实获得了权限。抛出的错误是:

unable to write to clipboard. Error:

TypeError: Failed to execute 'write' on 'Clipboard': Iterator …
Run Code Online (Sandbox Code Playgroud)

javascript clipboard navigator google-chrome-extension

5
推荐指数
1
解决办法
8265
查看次数

USB 硬盘仿真导致磁盘读取失败(BIOS int 13)?

一些背景:

我正在开发一个基本的引导加载程序,它通过 BIOSINT 13h AH=02h中断将辅助引导加载程序读入内存。我已经在模拟器(Virtualbox、Qemu 和 Bochs)中运行了它。

随后,我在我的引导加载程序中添加了一个 BPB(BIOS 参数块),制作了一个可引导的 USB,并在我的真机上使用 USB Floppy Emulation(我在真机 BIOS 的配置屏幕中设置)进行了测试。它就像一个魅力。

在我自己的机器上测试引导加载程序后,我在另一台较新的机器上测试了它。这台新计算机的 BIOS 配置中没有软盘仿真选项,因此无法从 USB 驱动器启动。因此,在这个osdev wikipage 之后,我在 MBR 的末尾添加了一个分区表,以便较新的机器可以从 USB 启动。

问题:

使用添加的分区表代码,引导加载程序无法将辅助引导加载程序加载到内存中,并且 BIOSINT 13h失败。我不知道为什么会发生这种情况,因为我没有更改任何实际的引导加载程序代码。我刚刚添加了 64 位 MBR 分区表,将数据读入内存立即失败。

BPB(BIOS 参数块)和磁盘访问例程

bits    16 
org 0x7C00

jmp start
nop
;------------------------------------------;
;  Standard BIOS Parameter Block, "BPB".   ;
;------------------------------------------;
     bpbOEM         db  'MSDOS5.0'
     bpbSectSize    dw  512
     bpbClustSize   db  1
     bpbReservedSe  dw  1
     bpbFats        db  2
     bpbRootSize    dw  224
     bpbTotalSect   dw  2880 …
Run Code Online (Sandbox Code Playgroud)

assembly mbr bios bootloader x86-16

3
推荐指数
1
解决办法
817
查看次数

将8位整数模式有效复制到32位整数?

给定一个8位整数'c8',必须将位模式复制到32位整数'c32',这样'c32'由重复4次的'c8'组成.例如,

if c8 =     1000 1110, 
then c32 =  1000 1110 1000 1110 1000 1110 1000 1110
Run Code Online (Sandbox Code Playgroud)

我已经考虑过这个并在C中提出了两种方法.但是,我不是那么经验,而且我不确定哪种方法,如果有的话,我应该在最终的代码中使用.

最小例子:

uint8_t c8 = 0b10001110;  // for this example

// method 1
uint32_t c32 = ((c8 << 8 | c8) << 16) | (c8 << 8 | c8); 

// method 2
uint16_t c16 = c8 << 8 | c8; 
uint32_t _c32 = c16 << 16 | c16;
Run Code Online (Sandbox Code Playgroud)

这两种方法都按预期工作,但我想知道哪一种从专家的角度来看会更好":-).
在第一种方法中,我正在计算多个班次,而在第二个方法中,我正在创建一个额外的变量.我不是那种经验不足的低级事物(以及这些低级事物的表现),如果有人能指出我正确的方向,或者找到更好的方法,我会很感激.

谢谢.

c bit-manipulation

2
推荐指数
1
解决办法
94
查看次数

汇编——系统调用 write 返回 -38,无输出

我正在尝试学习一些汇编,并且我从将文本输出到屏幕开始。我开始认为这可能是我的环境和/或编译的问题:到目前为止,我非常沮丧,我实际上已经复制粘贴了汇编代码,但它只是不会调用系统调用。这是源代码(主要改编自https://en.wikibooks.org/wiki/X86_Assembly/Interface_with_Linux

.section .data
msg: .ascii "Hello World\n"
.section .text

.global main
main: 
    movq $1, %rdi   # write to stdout
    movq $msg, %rsi # use string "Hello World"
    movq $12, %rdx  # write 12 characters
    syscall         # make syscall

    movq $60, %rax  # use the _exit syscall
    movq $0, %rdi   # error code 0
    syscall         # make syscall
Run Code Online (Sandbox Code Playgroud)

我在运行 Kali Linux 的 64 位机器上,并使用 GCC 进行编译。就像这样:

gcc -c test.s
gcc test.o -no-pie
Run Code Online (Sandbox Code Playgroud)

我已经用 GDB 调试了程序,系统调用指令总是将 eax 寄存器设置为 0xffffffffffffffda (-38),这似乎不正确...... …

linux assembly system-calls

0
推荐指数
1
解决办法
1032
查看次数