小编xmc*_*mcp的帖子

如何在 Chrome 中模拟偏色方案媒体查询?

Chrome 76 添加了对prefers-color-scheme媒体查询的支持(又名“暗模式”)。

但是,如何在不打开和关闭系统暗模式的情况下轻松地以两种配色方案测试我的网页?

这是Firefox的相同问题,但我在 Chrome 和 Chrome DevTools 中找不到类似的设置。

css google-chrome media-queries macos-darkmode

60
推荐指数
3
解决办法
2万
查看次数

React 18 中 startTransition 的规则和限制是什么?

React 刚刚startTransition在 v18 中发布了 API。虽然这看起来像是一个可以带来更多响应能力的“魔咒”,但该文档对其幕后行为的描述相当模糊。文档中与其行为相关的唯一一句话是“转换中的更新会产生更紧急的更新,例如点击”。

作为一名 React 程序员,我担心它是否会导致我的组件出现故障。例如:

  • 过渡期间国家会分裂成两个分支吗?假设我们有一个当前的state. 当转换将其转变为 时slow_update(state),会发生另一个事件将状态转变为fast_update(state)。在这个过程中我们将同时得到slow_update(state)fast_update(state)计算。当状态更新按顺序完成时,这在旧的 React 中永远不会发生。
  • 如果useEffect状态更新触发了一些钩子,如果转换被中断,回调会执行两次吗?由于状态在转换期间发生分支,回调是否会收到一些不一致的数据?

我也很好奇它会让我的应用程序变得更加灵敏。例如:

  • 是否startTransition适用于渲染阶段,还是仅优化协调?它仅适用于回调本身,还是也适用于更新状态的后续渲染、useMemos 和s?useEffect看来 CPU 密集型逻辑无论如何都会阻塞主线程,因此 React 无法中断它。因此,如果我的组件在回调中过滤长列表startTransition,它是否得到了优化?
  • 如果重复发生紧急更新,慢速更新会永远被阻塞吗?例如,如果组件requestAnimationFrame每 16ms 更新一次状态,而慢速转换需要更长的时间,那么慢速转换是否会一次又一次被中断?

我已阅读文档发行说明reactwg 讨论官方示例,但它们没有回答上述问题。由于与并发相关的错误很难修复或重现,因此如果有一些拇指规则(例如hooks 规则)可以保持转换代码始终正确,那就太好了。

一般来说,哪些代码将从中受益startTransition,以及需要什么来避免故障?

javascript reactjs react-hooks

9
推荐指数
0
解决办法
808
查看次数

检测浏览器扩展程序是在 Chrome 还是 Firefox 上运行的最佳实践?

我已经编写了一个 Chrome 扩展程序,我正在将它迁移到其他浏览器,如 Firefox 和 Edge。但是,与 Chrome 的 API 相比,Firefox 上的 WebExtensions API 有一些差异。

所以我必须检测我是否应该使用回调风格的 API(在 Chrome 中,以及在 Edge 中)或承诺风格的 API(在 Firefox 中)。

例如:

if(RUNNING_ON_CHROME)
    chrome.permissions.request({
        permissions: ...,
        origins: ...,
    }, function(result) { // callback-style
        ...
    });
else // running on firefox
    browser.permissions.request({
        permissions: ...,
        origins: ...,
    }).then(function(result) { // promise-style
        ...
    });
Run Code Online (Sandbox Code Playgroud)

我想知道如何进行RUNNING_ON_CHROME测试。我应该检查 UserAgent 中的相关字符串,还是检查browser!==undefined

附:Edge 使用browser.*API,但它的 API 是回调式的。

javascript firefox google-chrome google-chrome-extension firefox-addon-webextensions

4
推荐指数
1
解决办法
2391
查看次数

Chromedriver在Travis CI坠毁

这是一个MCVE:

/.travis.yml:

language: python
python:
  - "3.5"
dist: trusty
addons:
  chrome: stable
before_install:
  - pip install selenium
  - wget https://chromedriver.storage.googleapis.com/2.35/chromedriver_linux64.zip
  - unzip chromedriver_linux64.zip -d test/driver/
before_script:
  - "export DISPLAY=:99.0"
  - "sh -e /etc/init.d/xvfb start"
  - sleep 3
script:
  - cd test
  - python3 ./test_main.py
Run Code Online (Sandbox Code Playgroud)

/test/test_main.py:

from selenium.webdriver import *
b=Chrome('driver/chromedriver')
b.get('http://example.com')
b.quit()
Run Code Online (Sandbox Code Playgroud)

构建将失败,引发一个异常,说chrome崩溃了:

$ python3 ./test_main.py
Traceback (most recent call last):
  File "./test_main.py", line 2, in <module>
    b=Chrome('driver/chromedriver')
  File "/home/travis/virtualenv/python3.5.4/lib/python3.5/site-packages/selenium/webdriver/chrome/webdriver.py", line 75, in __init__
    desired_capabilities=desired_capabilities)
  File "/home/travis/virtualenv/python3.5.4/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line …
Run Code Online (Sandbox Code Playgroud)

travis-ci selenium-chromedriver selenium-webdriver

4
推荐指数
1
解决办法
656
查看次数

无法在 Python Virtualbox API 中恢复 VM

我想在 Virtualbox API 中恢复虚拟机,但出现此异常:

AttributeError: '<win32com.gen_py.VirtualBox Type Library.IConsole instance at 0x41746480>' object has no attribute 'restoreSnapshot'
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

这是我的代码:

import vboxapi

def wait(sth):
    sth.waitForCompletion(-1)

class Foo:
    mgr=vboxapi.VirtualBoxManager()
    vbox=mgr.vbox
    vm=vbox.findMachine(const.VM_NAME)

    def __init__(self):
        self.session=self.mgr.getSessionObject(self.vbox)
        wait(self.vm.launchVMProcess(self.session, 'gui', ''))

    def restore(self):
        console=self.session.console
        wait(console.powerDown())
        wait(console.restoreSnapshot(self.vm.findSnapshot('test')))
        wait(console.powerUp())

foo=Foo()
foo.restore()
Run Code Online (Sandbox Code Playgroud)

我在 Python 3.4 下使用 vboxapi 5.0.10。

另外,当我改变console.restoreSnapshotself.vm.restoreSnapshot根据VirtualBox的SDK参考,它说Method Machine::restoreSnapshot is not implemented

python virtualbox pywin32

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

实现python内置函数

我是python中的新手,我想学习python的内置函数的实现abs(),但是在\__builtin__.py我看到的python文件中:

builtin_abs_function

有人知道它是如何工作的吗?

python built-in

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