如何多次使用pyodide功能
How to use pyodide function more one times
我想要 运行 函数来阻止 table 的每一行。我想在 HTML 代码加载后执行此操作,我试试这个
<body>
<script
type="text/javascript"
src="https://cdn.jsdelivr.net/pyodide/dev/full/pyodide.js"
></script>
<script type="text/javascript">
async function main(kw) {
let pyodide = await loadPyodide({
indexURL: "https://cdn.jsdelivr.net/pyodide/dev/full/",
});
pyodide.globals.set("mikw", kw);
await pyodide.loadPackage("micropip");
await pyodide.runPythonAsync(`
import micropip
import js
await micropip.install('snowballstemmer')
import snowballstemmer
stemmer = snowballstemmer.stemmer('english')
div = js.document.createElement("div")
div.innerHTML = stemmer.stemWords('Hello this my default text '.split())
js.document.body.prepend(div)
varP = js.document.getElementById('origen').textContent
print(varP)
salida = stemmer.stemWords(varP.split())
print(salida)
divSalida = js.document.createElement("div")
div.innerHTML =salida
salida = stemmer.stemWords(mikw.split())
print(salida)
`);
}
main('This are the second text, I put this text on arguments function');
</script>
<div id="origen" >This text is inside of HTML element</div>
</body>
输出为
['This', 'text', 'is', 'insid', 'of', 'HTML', 'element']
['This', 'are', 'the', 'second', 'text,', 'I', 'put', 'this', 'text', 'on', 'argument', 'function']
但是我不能(或者我不知道)在加载 html 之后使用函数来阻止其他关键字,例如在加载 DOM 之后(获取我的 HTML table 和 运行 每个)
....
<div id="origen" onclick="temp()">This text is inside of HTML element</div>
<script>
myNewkwStemm=main('other word');
myNewkwStemm2=main('word2');
</script>
</body>
您通过在 main 函数中包含 loadPyodide
调用多次加载 Pyodide,这会导致您后续的 main
调用出错。将 loadPyodide
移到 main
之外应该可以解决问题:
<script type="text/javascript">
let initPyodide = loadPyodide({
indexURL: "https://cdn.jsdelivr.net/pyodide/dev/full/",
})
async function main(kw) {
let pyodide = await initPyodide
// ... other code
}
此外,您可能不想依赖 pyodide.globals
来传递参数,这会导致竞争条件,因为您 运行 一切都是异步的。
我想要 运行 函数来阻止 table 的每一行。我想在 HTML 代码加载后执行此操作,我试试这个
<body>
<script
type="text/javascript"
src="https://cdn.jsdelivr.net/pyodide/dev/full/pyodide.js"
></script>
<script type="text/javascript">
async function main(kw) {
let pyodide = await loadPyodide({
indexURL: "https://cdn.jsdelivr.net/pyodide/dev/full/",
});
pyodide.globals.set("mikw", kw);
await pyodide.loadPackage("micropip");
await pyodide.runPythonAsync(`
import micropip
import js
await micropip.install('snowballstemmer')
import snowballstemmer
stemmer = snowballstemmer.stemmer('english')
div = js.document.createElement("div")
div.innerHTML = stemmer.stemWords('Hello this my default text '.split())
js.document.body.prepend(div)
varP = js.document.getElementById('origen').textContent
print(varP)
salida = stemmer.stemWords(varP.split())
print(salida)
divSalida = js.document.createElement("div")
div.innerHTML =salida
salida = stemmer.stemWords(mikw.split())
print(salida)
`);
}
main('This are the second text, I put this text on arguments function');
</script>
<div id="origen" >This text is inside of HTML element</div>
</body>
输出为
['This', 'text', 'is', 'insid', 'of', 'HTML', 'element']
['This', 'are', 'the', 'second', 'text,', 'I', 'put', 'this', 'text', 'on', 'argument', 'function']
但是我不能(或者我不知道)在加载 html 之后使用函数来阻止其他关键字,例如在加载 DOM 之后(获取我的 HTML table 和 运行 每个)
....
<div id="origen" onclick="temp()">This text is inside of HTML element</div>
<script>
myNewkwStemm=main('other word');
myNewkwStemm2=main('word2');
</script>
</body>
您通过在 main 函数中包含 loadPyodide
调用多次加载 Pyodide,这会导致您后续的 main
调用出错。将 loadPyodide
移到 main
之外应该可以解决问题:
<script type="text/javascript">
let initPyodide = loadPyodide({
indexURL: "https://cdn.jsdelivr.net/pyodide/dev/full/",
})
async function main(kw) {
let pyodide = await initPyodide
// ... other code
}
此外,您可能不想依赖 pyodide.globals
来传递参数,这会导致竞争条件,因为您 运行 一切都是异步的。