我正在加载Brython和iFlyChat,但是如果不对iFlyChat脚本进行注释,则Brython将无法工作。我已经尝试了各种异步组合,但是似乎还有一些更基本的东西。
JSFiddle这里和下面的代码:
https://jsfiddle.net/tutmoses/c09dhbrq/
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Title</title>
<!-- BRYTHON -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.8/brython.js" integrity="sha256-rA89wPrTJJQFWJaZveKW8jpdmC3t5F9rRkPyBjz8G04=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.8/brython_stdlib.js" integrity="sha256-Gnrw9tIjrsXcZSCh/wos5Jrpn0bNVNFJuNJI9d71TDs=" crossorigin="anonymous"></script>
<!-- IFLYCHAT
<script>
console.log("init iflychat plugin");
var iflychat_app_id="1c0d1abc-4864-4608-acb7-6cdbfab07ce2";
var iflychat_external_cdn_host="cdn.iflychat.com",iflychat_bundle=document.createElement("SCRIPT");iflychat_bundle.src="//"+iflychat_external_cdn_host+"/js/iflychat-v2.min.js?app_id="+iflychat_app_id,iflychat_bundle.async="async",document.body.appendChild(iflychat_bundle);var iflychat_popup=document.createElement("DIV");iflychat_popup.className="iflychat-popup",document.body.appendChild(iflychat_popup);
</script> -->
</head>
<body onload="brython()">
<div class="container">
<h2 id="hello"></h2>
<button id="alert-btn">Alert & Insert</button>
<input type="text" id="text" placeholder="Enter something">
<span id="output"></span>
</div>
<!-- Alert & DOM insert -->
<script type="text/python" id="script0">
from browser import document, console, alert
def show(e):
console.log(e)
alert('Hello World')
document['hello'] <= 'Hello World'
document['alert-btn'].bind('click', show)
</script>
<!-- Text bind -->
<script type="text/python" id="script1">
from browser import document
def show_text(e):
document['output'].textContent = e.target.value;
document['text'].bind('input', show_text)
</script>
</body>
</html>
您正在做的是在这里使用两种语言来运行脚本,1.使用Java脚本进行初始化iFlyChat
2.使用Python语言作为输入框
解释同时启用两个脚本的情况:
在onload
您使用初始化该方法brython
将永远不会被称为有两个脚本之间的竞争条件。延迟某个时间可以解决我们的问题。
解决了:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Title</title>
<!-- BRYTHON -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.8/brython.js" integrity="sha256-rA89wPrTJJQFWJaZveKW8jpdmC3t5F9rRkPyBjz8G04=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.8/brython_stdlib.js" integrity="sha256-Gnrw9tIjrsXcZSCh/wos5Jrpn0bNVNFJuNJI9d71TDs=" crossorigin="anonymous"></script>
</head>
<body>
<div class="container">
<h2 id="hello"></h2>
<button id="alert-btn">Alert & Insert</button>
<input type="text" id="text" placeholder="Enter something">
<span id="output"></span>
</div>
<!--Calling it first because it has javascript language and specially mentioned "text/javascript" in type here -->
<!-- IFLYCHAT -->
<script type="text/javascript">
console.log("init iflychat plugin");
var iflychat_app_id="1c0d1abc-4864-4608-acb7-6cdbfab07ce2";
var iflychat_external_cdn_host="cdn.iflychat.com",iflychat_bundle=document.createElement("SCRIPT");iflychat_bundle.src="//"+iflychat_external_cdn_host+"/js/iflychat-v2.min.js?app_id="+iflychat_app_id,document.body.appendChild(iflychat_bundle);var iflychat_popup=document.createElement("DIV");iflychat_popup.className="iflychat-popup",document.body.appendChild(iflychat_popup);
</script>
<!-- now initializing brython with a delay of 10ms-->
<script type="text/javascript">
setTimeout(() => {
console.log("init Brython");
window.brython();
}, 10);
</script>
<!-- Alert & DOM insert -->
<script type="text/python" id="script0">
from browser import document, console, alert
def show(e):
console.log(e)
alert('Hello World')
document['hello'] <= 'Hello World'
document['alert-btn'].bind('click', show)
</script>
<!-- Text bind -->
<script type="text/python" id="script1">
from browser import document
def show_text(e):
document['output'].textContent = e.target.value;
document['text'].bind('input', show_text)
</script>
</body>
</html>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句