Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 38

0
votes
answers
8 views
+10

HTML5畫布 - 爲什麼矩形的顏色總是返回黑色?

1

我想畫一個畫布矩形,每個負載都會改變顏色。這裏是我的代碼:HTML5畫布 - 爲什麼矩形的顏色總是返回黑色?

window.onload = function() { 
    var can = document.getElementById("lol"); 
    var ctx = can.getContext("2d"); 
    var colors = ["rgba(255,0,0,1)", "rgba(0,255,0,1)", "rgba(0,0,255,1)"]; 

    ctx.fillStyle = colors[Math.random() * 3]; 
    ctx.fillRect(40,40,30,25); 
} 

然而,每當我打開一個網頁,顏色應改爲紅色,藍色或綠色,但顏色是黑色的持續。

爲什麼會發生這種情況?我的代碼有什麼問題?

+1

您的日常隨機很少返回一個整數 –

沙发
0
3

您沒有正確選取隨機數。你的隨機函數幾乎不會返回一個整數。

Read more about Math.random here.

這裏是你想要做什麼:

var can = document.getElementById("lol"); 
 
var ctx = can.getContext("2d"); 
 
var colors = ["rgba(255,0,0,1)", "rgba(0,255,0,1)", "rgba(0,0,255,1)"]; 
 

 
ctx.fillStyle = colors[Math.floor(Math.random() * 3)]; 
 
ctx.fillRect(40,40,30,25);
<canvas id="lol"></canvas>

板凳
0
2

你需要一個整數值,用於訪問數組元素。

ctx.fillStyle = colors[Math.floor(Math.random() * 3)]; 

我建議使用數組作爲隨機數因子的長度(一個恆定vaue可能出錯,如果單元的計數改變後)。

ctx.fillStyle = colors[Math.floor(Math.random() * colors.length)]; 
地板
0
1

試試這個:ctx.fillStyle = colors[Math.floor(Math.random() * colors.length)]; https://jsfiddle.net/xpavwkod/

0
votes
answers
7 views
+10

使用Cordova文件插件

1

在我的Android Cordova應用程序中,我想從本地緩存中爲經常使用的圖像文件提供服務,以節省帶寬和/或無網絡時。 Cordova File plugin似乎很適合這份工作。但是,我在創建緩存圖像文件後,如何從外部源獲取圖像文件時遇到了一些困難。步驟據我可以看到有以下使用Cordova文件插件

  • 獲取外部文件
  • 一旦它可使用window.requestFileSystem以訪問沙盒文件系統。這將返回文件系統對象,該對象的filesystem屬性的對象爲{{name:「persistent」,rood:DirectoryEntry}
  • 將上面的directoryEntry和獲取的圖像blob一起傳遞給fs.root.getFile('example.png 」,{創建:真實,獨家:真正},fileCreated,fileCreationFailed) ...

這是最後一步,是不是我清楚。從我閱讀的插件文檔中,創建緩存映像文件的正確位置是cache文件夾。但是,如果我發出上述root.getFile,我肯定會嘗試在根文件夾中創建映像文件 - 這可能會失敗,因爲該位置不是讀寫。

我要麼誤解這裏的東西,要麼缺少一些文檔。無論是哪種情況,我都希望這裏的某個人能夠讓我走上正軌。

+0

人誰投票決定關閉這 - 你能解釋一下爲什麼嗎?我的研究不足,是否不適合這個論壇的格式,我是否從事自我推銷,已經得到了答覆......?如果你什麼也沒說,只要按下那個關閉按鈕,你認爲它的用途是什麼? – DroidOS

沙发
0
0

由於outlined in the cordova-plugin-file documentation你應該能夠使用電話window.requestFileSystem得到一個參考應用程序緩存文件夾,然後你就可以用它來讀/寫文件時,window.TEMPORARY說法:

window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, function (fs) { 
    console.log('file system open: ' + fs.name); 
    createFile(fs.root, "newTempFile.txt", false); 
}, onErrorLoadFs); 
0
votes
answers
7 views
+10

正則表達式對HTML5

-1

與空間的名字我想下面的圖案爲Name字段HTML5,但每次我收到錯誤: - 「請符合要求的格式」 正則表達式對HTML5

除了上面的圖案,我也給了不同的模式如: - 一個)圖案= 「/^[A-ZA-Z S] + $ /」 b)圖案=「/^[A-ZA-Z] S [A-ZA-Z] + $ /」

所有這三種模式都不能正常工作。我想要的是簡單的名字,比如「哈利波特」。 請指教。

在此先感謝。

+0

的名字只能是1個字符? ;)你需要去掉'/'(這只是在JavaScript中定義一個正則表達式時需要的)。在模式屬性中也不需要'^'和'$',因爲它們是強制執行的。 –

+0

刪除反斜槓。在這裏使用'pattern =「[A-Za-z] + s [A-Za-z] +」作爲錨點。 –

+0

名稱不起作用! http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Quentin

沙发
0
0

需要,因爲在JavaScript中他們表示字符串實際上是一個正則表達式來從你的模式中刪除開頭和結尾的斜槓,但在HTML屬性它已經被稱爲是一個正則表達式。

模式本身將取決於你希望接受什麼樣的名字,你的表達不接受非拉丁名,但有很多人有這樣的名字。基本上如果你想檢查至少2個單詞的存在(因爲名稱可以包含多於2個單詞)。例如,您可以使用此pattern="DS+(s+DS+)+"來檢查是否存在至少2個由空格分隔的單詞,並且每個單詞不應以數字開頭。

0
votes
answers
7 views
+10

三角函數的問題:圓角與矩形相交

0

我一直在試圖製作一個程序,其中一個球從一個旋轉的矩形反彈出來,我必須學習一些基本的三角函數,但是我注意到當我跑時這是它是半不準確的。就像每當球擊中矩形只是離開中心一點點時,它就會直接穿過它,或者沿着它沒有想到的方向反彈。爲了更好地理解我的問題,如果您去檢查了my fiddle,我將不勝感激。三角函數的問題:圓角與矩形相交

我認爲這是一個數學問題,(考慮到我的成績直到10或11年級纔會學到),但它可能更多。


這裏的數學funcions:

function getNormal(a) { 
    return { 
     x: Math.sin(a), 
     y: Math.cos(a) 
    } 
} 

function reflect(n, v) { 
    let d = 2 * dot(v, n); 
    v.x -= d * n.x; 
    v.y -= d * n.y; 
    return v; 
} 

function dot(v1, v2) { 
    return v1.x * v2.x + v1.y * v2.y; 
} 
沙发
0
0

看來,一個是切線角度(面線的角度),在這種情況下,正常的計算是錯誤的

x: - Math.sin(a), 
    y: Math.cos(a) 

    (or for opposite normal) 
    x: Math.sin(a), 
    y: - Math.cos(a) 

一個更可能的問題 - 三角函數是否與你的語言中的弧度或度有關?

+0

您錯過了OP代碼的主要問題。第102行讀取'let normal = getNormal(padAngle);''padAngle'爲'undefined'並且行應該讀爲'let normal = getNormal(pad.angle);'並且我看不到deg和rad之間的任何單位轉換所以除了旋轉的規模之外,所使用的單位應該沒有問題。 – Blindman67

0
votes
answers
6 views
+10

HTML5的contenteditable屬性應該是XSS安全嗎?

3

我已經閱讀了有關的相關問題div contenteditable, XSS,但其答案並沒有強調關於XSS的contenteditable安全問題。特別是關於意外(與內部跨站腳本相比)。當然,我知道我應該清理用戶輸入服務器端。HTML5的contenteditable屬性應該是XSS安全嗎?

TL.DR.:我可以肯定的是,用戶並不突出風險引入一些外部腳本(即通過從剪貼板粘貼的數據。)通過頁面元素被設置contenteditable?規範是否確保粘貼到contenteditable的任何標記在插入到DOM之前都已經過消毒處理?

我注意到,在我試驗了兩種主要的瀏覽器,鉻/ Chrome和Firefox,這似乎是不可能的意外插入活性元素contenteditable標籤。

  • 用戶複製DOM元素從一個網頁上的選擇和它們插入contenteditable元素在其他網站上:對於這樣的斯瓦特插入我會想到是例如一個例子。
  • 用戶在(在Linux命令行上)echo "<b onclick='alert("XSS");'>click me</b>" | xclip -t text/html -selection "clipboard"並將其粘貼到contenteditable中。

一種有源元件將是類似的東西:

  • 包含含有與內聯處理程序如onclick="alert("XSS");"
  • 包含JavaScript的HREF諸如HTML的標記元素一個<script>
  • HTML標記的HTML標記<a href="javascript:alert("XSS")"> click me </a>

現在我的問題是,看到contenteditable似乎有點安全,沒有任何正常的XSS矢量被粘貼到,如果這是由設計?

我看過一些specs/refs/whatever在那裏既沒有明確提到contenteditable應防止任何有源元件被插入到頁面的DOM,無論它會被允許。這讓我懷疑是否應該使用contenteditable功能,因爲我不想冒一些外部JavaScript被插入contenteditable的風險。回答這個問題的核心是contenteditable這個XSS安全。

更新 與此相反的contenteditable屬性相似特徵文件designMode,似乎是特異性的(見https://www.w3.org/TR/2008/WD-html5-20080610/web-browsers.html#designModeScriptBlocked)有關的javascript被停用(因此防止XSS)。

UPDATE 2 最近的參考/規格上MDN引用是https://html.spec.whatwg.org/multipage/interaction.html#contenteditable 是奇怪淡漠任何保證contenteditable提供到不經由漿料引入的惡意的JavaScript。

+3

只要你在服務器端清理輸入,我不明白爲什麼有人在'contenteditable'中粘貼JavaScript就是一個問題。任何人都可以打開開發工具並在頁面上執行任何可能足以應對XSS攻擊的JavaScript(如果服務器端未設置爲防止此類攻擊)。 –

+0

@DeepakKamat我想(假設用戶已經登錄並且有一定的權限來刪除內容),如果粘貼一個惡意腳本會繼承這個特權,我會認爲這是有問題的。你打算說什麼?此外,我假設XSS安全還會覆蓋用戶數據(如他的輸入數據)的安全性,如果可能,通過'contenteditable'可能會將惡意腳本發送給惡意第三方。當然,它的服務器是不妥協的,但在我的理解中,攻擊用戶帳戶/數據的XSS不好,因此我擔心 – humanityANDpeace

+0

爲什麼從9年半前閱讀規格而不是當前規格? – BoltClock

沙发
0
0

沒有標準,它的瀏覽器一定要堅持,所以每個瀏覽器都會有自己的處理用戶輸入的實現。如果有辦法,你可以確定用戶將會知道如何去做(舊版瀏覽器通常是最容易受影響的)。這要取決於你清理用戶的輸入,無論是來自打字,粘貼等(我必須爲一個項目執行此操作,因爲沒有辦法依靠它「正常工作」)。

至於將designMode,你鏈接的部分:

當腳本是在腳本被禁用腳本執行上下文中執行腳本必須什麼也不做,什麼也不返回(返回值爲空)。

因此,例如,啓用designMode將禁用由文檔中的腳本設置的任何事件處理程序屬性,事件偵聽器,超時等。

這將使它看起來的designMode讓你「安全」,但要記住,規格隨着時間的演變,所以沒有回去和測試所有不同的瀏覽器(或至少用戶都使用的),你可以從來不確定。

+0

我已經測試了「安全」,通過'document.designMode = 「on」,並沒有像預期的那樣行事。 https://stackoverflow.com/q/47996078/1711186 – humanityANDpeace

+0

Gmail在其html5用戶界面中使用了'contenteditable',所以我無法想象任何潛在的XSS或HTMLInjection https://davidyat.es/2016/02/16/contenteditable /問題留給瀏覽器完成。對我來說,任何瀏覽器執行contenteditable的方法都會以粘貼內容不會冒數據泄露的風險的方式來實現它。沒有標準的答案是令人震驚或虛假,或有風險:) – humanityANDpeace

+0

我會說可怕的!但相信我,我通過閱讀關於表單元素,輸入事件的w3規範的文檔瀏覽了幾個小時,並且僅僅爲了得出它是特定於實現的。 http://www.w3.org/TR/#w3c_all我使用contentEditable工作在一個類似於GMail的基於HTML的郵件系統上,因爲我們希望我們自己的JS仍然在內部運行,所以我們沒有使用designMode。 contentEditable實際上與